Consider this async iterable:
const it = {
[Symbol.asyncIterator]() {
return {
async next() {
if (i > 2) return { done: true };
i++;
return { value: Promise.resolve(i), done: false }
}
}
}
}
Unless I'm reading the spec wrong, await Array.fromAsync(it) returns [Promise.resolve(1), Promise.resolve(2), Promise.resolve(3)] while await Array.fromAsync(it, x => x) returns [1, 2, 3].
Currently, when using Array.from, x => x is the "default mapper function" (even if it's not specified as such): Array.from(something) is always equivalent to Array.from(something, x => x). However, there is no "default function" that can be passed to Array.fromAsync.
If we changed Array.fromAsync(something) to await the next.value values, await Array.fromAsync(it) would always return the same result as await Array.fromAsync(it, x => x). In practice, it means making it behave like
const arr = [];
for await (const nextValue of it) arr.push(await nextValue);
Consider this async iterable:
Unless I'm reading the spec wrong,
await Array.fromAsync(it)returns[Promise.resolve(1), Promise.resolve(2), Promise.resolve(3)]whileawait Array.fromAsync(it, x => x)returns[1, 2, 3].Currently, when using
Array.from,x => xis the "default mapper function" (even if it's not specified as such):Array.from(something)is always equivalent toArray.from(something, x => x). However, there is no "default function" that can be passed toArray.fromAsync.If we changed
Array.fromAsync(something)to await thenext.valuevalues,await Array.fromAsync(it)would always return the same result asawait Array.fromAsync(it, x => x). In practice, it means making it behave like