diff options
Diffstat (limited to 'node_modules/core-js/modules/es.promise.all-settled.js')
| -rw-r--r-- | node_modules/core-js/modules/es.promise.all-settled.js | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/node_modules/core-js/modules/es.promise.all-settled.js b/node_modules/core-js/modules/es.promise.all-settled.js new file mode 100644 index 0000000..ed10ce6 --- /dev/null +++ b/node_modules/core-js/modules/es.promise.all-settled.js @@ -0,0 +1,43 @@ +'use strict'; +var $ = require('../internals/export'); +var aFunction = require('../internals/a-function'); +var newPromiseCapabilityModule = require('../internals/new-promise-capability'); +var perform = require('../internals/perform'); +var iterate = require('../internals/iterate'); + +// `Promise.allSettled` method +// https://github.com/tc39/proposal-promise-allSettled +$({ target: 'Promise', stat: true }, { + allSettled: function allSettled(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 values = []; + var counter = 0; + var remaining = 1; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + values.push(undefined); + remaining++; + promiseResolve.call(C, promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = { status: 'fulfilled', value: value }; + --remaining || resolve(values); + }, function (error) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = { status: 'rejected', reason: error }; + --remaining || resolve(values); + }); + }); + --remaining || resolve(values); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); |
