promiseUtils.js 2.2 KB

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