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.
		
		
		
		
		
			
		
			
				
					
					
						
							46 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
	
	
							46 lines
						
					
					
						
							1.6 KiB
						
					
					
				'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; | 
						|
  } | 
						|
});
 | 
						|
 |