core-js
Version:
Standard library
41 lines (39 loc) • 1.32 kB
JavaScript
;
// `Promise.any` method
// https://github.com/tc39/proposal-promise-any
var newPromiseCapabilityModule = require('../internals/new-promise-capability');
var perform = require('../internals/perform');
var iterate = require('../internals/iterate');
require('../internals/export')({ target: 'Promise', stat: true }, {
any: function any(iterable) {
var C = this;
var capability = newPromiseCapabilityModule.f(C);
var resolve = capability.resolve;
var reject = capability.reject;
var result = perform(function () {
var errors = [];
var counter = 0;
var remaining = 1;
var alreadyResolved = false;
iterate(iterable, function (promise) {
var index = counter++;
var alreadyRejected = false;
errors.push(undefined);
remaining++;
C.resolve(promise).then(function (value) {
if (alreadyRejected || alreadyResolved) return;
alreadyResolved = true;
resolve(value);
}, function (e) {
if (alreadyRejected || alreadyResolved) return;
alreadyRejected = true;
errors[index] = e;
--remaining || reject(errors);
});
});
--remaining || reject(errors);
});
if (result.e) reject(result.v);
return capability.promise;
}
});