promiseUtils.js 2.2 KB

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