1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.continueWhile = continueWhile;
- exports.resolvingPromise = resolvingPromise;
- exports.when = when;
- // Create Deferred Promise
- function resolvingPromise() {
- let res;
- let rej;
- const promise = new Promise((resolve, reject) => {
- res = resolve;
- rej = reject;
- });
- promise.resolve = res;
- promise.reject = rej;
- return promise;
- }
- function when(promises) {
- let objects;
- const arrayArgument = Array.isArray(promises);
- if (arrayArgument) {
- objects = promises;
- } else {
- objects = arguments;
- }
- let total = objects.length;
- let hadError = false;
- const results = [];
- const returnValue = arrayArgument ? [results] : results;
- const errors = [];
- results.length = objects.length;
- errors.length = objects.length;
- if (total === 0) {
- return Promise.resolve(returnValue);
- }
- const promise = new resolvingPromise();
- const resolveOne = function () {
- total--;
- if (total <= 0) {
- if (hadError) {
- promise.reject(errors);
- } else {
- promise.resolve(returnValue);
- }
- }
- };
- const chain = function (object, index) {
- if (object && typeof object.then === 'function') {
- object.then(function (result) {
- results[index] = result;
- resolveOne();
- }, function (error) {
- errors[index] = error;
- hadError = true;
- resolveOne();
- });
- } else {
- results[index] = object;
- resolveOne();
- }
- };
- for (let i = 0; i < objects.length; i++) {
- chain(objects[i], i);
- }
- return promise;
- }
- function continueWhile(test, emitter) {
- if (test()) {
- return emitter().then(() => {
- return continueWhile(test, emitter);
- });
- }
- return Promise.resolve();
- }
|