You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					45 lines
				
				1.6 KiB
			
		
		
			
		
	
	
					45 lines
				
				1.6 KiB
			| 
											11 months ago
										 | 'use strict'; | ||
|  | var $ = require('../internals/export'); | ||
|  | var call = require('../internals/function-call'); | ||
|  | var aCallable = require('../internals/a-callable'); | ||
|  | var newPromiseCapabilityModule = require('../internals/new-promise-capability'); | ||
|  | var perform = require('../internals/perform'); | ||
|  | var iterate = require('../internals/iterate'); | ||
|  | var PROMISE_STATICS_INCORRECT_ITERATION = require('../internals/promise-statics-incorrect-iteration'); | ||
|  | 
 | ||
|  | // `Promise.allSettled` method
 | ||
|  | // https://tc39.es/ecma262/#sec-promise.allsettled
 | ||
|  | $({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, { | ||
|  |   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 = aCallable(C.resolve); | ||
|  |       var values = []; | ||
|  |       var counter = 0; | ||
|  |       var remaining = 1; | ||
|  |       iterate(iterable, function (promise) { | ||
|  |         var index = counter++; | ||
|  |         var alreadyCalled = false; | ||
|  |         remaining++; | ||
|  |         call(promiseResolve, 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; | ||
|  |   } | ||
|  | }); |