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.
36 lines
1.8 KiB
36 lines
1.8 KiB
'use strict'; |
|
var bind = require('../internals/function-bind-context'); |
|
var toObject = require('../internals/to-object'); |
|
var isConstructor = require('../internals/is-constructor'); |
|
var getAsyncIterator = require('../internals/get-async-iterator'); |
|
var getIterator = require('../internals/get-iterator'); |
|
var getIteratorMethod = require('../internals/get-iterator-method'); |
|
var getMethod = require('../internals/get-method'); |
|
var getVirtual = require('../internals/entry-virtual'); |
|
var getBuiltIn = require('../internals/get-built-in'); |
|
var wellKnownSymbol = require('../internals/well-known-symbol'); |
|
var AsyncFromSyncIterator = require('../internals/async-from-sync-iterator'); |
|
var toArray = require('../internals/async-iterator-iteration').toArray; |
|
|
|
var ASYNC_ITERATOR = wellKnownSymbol('asyncIterator'); |
|
var arrayIterator = getVirtual('Array').values; |
|
|
|
// `Array.fromAsync` method implementation |
|
// https://github.com/tc39/proposal-array-from-async |
|
module.exports = function fromAsync(asyncItems /* , mapfn = undefined, thisArg = undefined */) { |
|
var C = this; |
|
var argumentsLength = arguments.length; |
|
var mapfn = argumentsLength > 1 ? arguments[1] : undefined; |
|
var thisArg = argumentsLength > 2 ? arguments[2] : undefined; |
|
return new (getBuiltIn('Promise'))(function (resolve) { |
|
var O = toObject(asyncItems); |
|
if (mapfn !== undefined) mapfn = bind(mapfn, thisArg); |
|
var usingAsyncIterator = getMethod(O, ASYNC_ITERATOR); |
|
var usingSyncIterator = usingAsyncIterator ? undefined : getIteratorMethod(O) || arrayIterator; |
|
var A = isConstructor(C) ? new C() : []; |
|
var iterator = usingAsyncIterator |
|
? getAsyncIterator(O, usingAsyncIterator) |
|
: new AsyncFromSyncIterator(getIterator(O, usingSyncIterator)); |
|
resolve(toArray(iterator, mapfn, A)); |
|
}); |
|
};
|
|
|