promiseUtils.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. "use strict";
  2. var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
  3. var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
  4. _Object$defineProperty(exports, "__esModule", {
  5. value: true
  6. });
  7. exports.continueWhile = continueWhile;
  8. exports.resolvingPromise = resolvingPromise;
  9. exports.when = when;
  10. var _promise = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/promise"));
  11. var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
  12. // Create Deferred Promise
  13. function resolvingPromise() {
  14. var res;
  15. var rej;
  16. var promise = new _promise.default(function (resolve, reject) {
  17. res = resolve;
  18. rej = reject;
  19. });
  20. promise.resolve = res;
  21. promise.reject = rej;
  22. return promise;
  23. }
  24. function when(promises) {
  25. var objects;
  26. var arrayArgument = (0, _isArray.default)(promises);
  27. if (arrayArgument) {
  28. objects = promises;
  29. } else {
  30. objects = arguments;
  31. }
  32. var total = objects.length;
  33. var hadError = false;
  34. var results = [];
  35. var returnValue = arrayArgument ? [results] : results;
  36. var errors = [];
  37. results.length = objects.length;
  38. errors.length = objects.length;
  39. if (total === 0) {
  40. return _promise.default.resolve(returnValue);
  41. }
  42. var promise = new resolvingPromise();
  43. var resolveOne = function () {
  44. total--;
  45. if (total <= 0) {
  46. if (hadError) {
  47. promise.reject(errors);
  48. } else {
  49. promise.resolve(returnValue);
  50. }
  51. }
  52. };
  53. var chain = function (object, index) {
  54. if (object && typeof object.then === 'function') {
  55. object.then(function (result) {
  56. results[index] = result;
  57. resolveOne();
  58. }, function (error) {
  59. errors[index] = error;
  60. hadError = true;
  61. resolveOne();
  62. });
  63. } else {
  64. results[index] = object;
  65. resolveOne();
  66. }
  67. };
  68. for (var i = 0; i < objects.length; i++) {
  69. chain(objects[i], i);
  70. }
  71. return promise;
  72. }
  73. function continueWhile(test, emitter) {
  74. if (test()) {
  75. return emitter().then(function () {
  76. return continueWhile(test, emitter);
  77. });
  78. }
  79. return _promise.default.resolve();
  80. }