promiseUtils.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. Object.defineProperty(exports, "__esModule", {
  2. value: true
  3. });
  4. exports.continueWhile = continueWhile;
  5. exports.resolvingPromise = resolvingPromise;
  6. exports.when = when;
  7. function resolvingPromise() {
  8. var res;
  9. var rej;
  10. var promise = new Promise(function (resolve, reject) {
  11. res = resolve;
  12. rej = reject;
  13. });
  14. promise.resolve = res;
  15. promise.reject = rej;
  16. return promise;
  17. }
  18. function when(promises) {
  19. var objects;
  20. var arrayArgument = Array.isArray(promises);
  21. if (arrayArgument) {
  22. objects = promises;
  23. } else {
  24. objects = arguments;
  25. }
  26. var total = objects.length;
  27. var hadError = false;
  28. var results = [];
  29. var returnValue = arrayArgument ? [results] : results;
  30. var errors = [];
  31. results.length = objects.length;
  32. errors.length = objects.length;
  33. if (total === 0) {
  34. return Promise.resolve(returnValue);
  35. }
  36. var promise = new resolvingPromise();
  37. var resolveOne = function () {
  38. total--;
  39. if (total <= 0) {
  40. if (hadError) {
  41. promise.reject(errors);
  42. } else {
  43. promise.resolve(returnValue);
  44. }
  45. }
  46. };
  47. var chain = function (object, index) {
  48. if (object && typeof object.then === 'function') {
  49. object.then(function (result) {
  50. results[index] = result;
  51. resolveOne();
  52. }, function (error) {
  53. errors[index] = error;
  54. hadError = true;
  55. resolveOne();
  56. });
  57. } else {
  58. results[index] = object;
  59. resolveOne();
  60. }
  61. };
  62. for (var i = 0; i < objects.length; i++) {
  63. chain(objects[i], i);
  64. }
  65. return promise;
  66. }
  67. function continueWhile(test, emitter) {
  68. if (test()) {
  69. return emitter().then(function () {
  70. return continueWhile(test, emitter);
  71. });
  72. }
  73. return Promise.resolve();
  74. }