| 'use strict'; |
| var $ = require('../internals/export'); |
| var aFunction = require('../internals/a-function'); |
| var getBuiltIn = require('../internals/get-built-in'); |
| var newPromiseCapabilityModule = require('../internals/new-promise-capability'); |
| var perform = require('../internals/perform'); |
| var iterate = require('../internals/iterate'); |
| |
| var PROMISE_ANY_ERROR = 'No one promise resolved'; |
| |
| // `Promise.any` method |
| // https://github.com/tc39/proposal-promise-any |
| $({ 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 promiseResolve = aFunction(C.resolve); |
| 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++; |
| promiseResolve.call(C, 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(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR)); |
| }); |
| }); |
| --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR)); |
| }); |
| if (result.error) reject(result.value); |
| return capability.promise; |
| } |
| }); |