2 var $ = require('../internals/export');
3 var call = require('../internals/function-call');
4 var aCallable = require('../internals/a-callable');
5 var newPromiseCapabilityModule = require('../internals/new-promise-capability');
6 var perform = require('../internals/perform');
7 var iterate = require('../internals/iterate');
9 // `Promise.allSettled` method
10 // https://tc39.es/ecma262/#sec-promise.allsettled
11 $({ target: 'Promise', stat: true }, {
12 allSettled: function allSettled(iterable) {
14 var capability = newPromiseCapabilityModule.f(C);
15 var resolve = capability.resolve;
16 var reject = capability.reject;
17 var result = perform(function () {
18 var promiseResolve = aCallable(C.resolve);
22 iterate(iterable, function (promise) {
23 var index = counter++;
24 var alreadyCalled = false;
26 call(promiseResolve, C, promise).then(function (value) {
27 if (alreadyCalled) return;
29 values[index] = { status: 'fulfilled', value: value };
30 --remaining || resolve(values);
32 if (alreadyCalled) return;
34 values[index] = { status: 'rejected', reason: error };
35 --remaining || resolve(values);
38 --remaining || resolve(values);
40 if (result.error) reject(result.value);
41 return capability.promise;