parse
Version:
Parse JavaScript SDK
82 lines (81 loc) • 2.23 kB
JavaScript
;
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
_Object$defineProperty(exports, "__esModule", {
value: true
});
exports.continueWhile = continueWhile;
exports.resolvingPromise = resolvingPromise;
exports.when = when;
var _promise = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/promise"));
var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
// Create Deferred Promise
function resolvingPromise() {
let res;
let rej;
const promise = new _promise.default((resolve, reject) => {
res = resolve;
rej = reject;
});
const defer = promise;
defer.resolve = res;
defer.reject = rej;
return defer;
}
function when(promises) {
let objects;
const arrayArgument = (0, _isArray.default)(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.default.resolve(returnValue);
}
const promise = 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.default.resolve();
}