--- /dev/null
+'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;
+ }
+});