promiseUtils.js 1.7 KB

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