Array.fromAsync()
Baseline
2024
Newly available
Since â¨January 2024â©, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
Array.fromAsync() ì ì ë©ìëë ë¹ë기 ìí ê°ë¥, ìí ê°ë¥, ëë ì ì¬ ë°°ì´ ê°ì²´ìì ìê² ë³µì¬ë ìë¡ì´ Array ì¸ì¤í´ì¤ë¥¼ ë§ëëë¤.
구문
Array.fromAsync(arrayLike)
Array.fromAsync(arrayLike, mapFn)
Array.fromAsync(arrayLike, mapFn, thisArg)
매ê°ë³ì
arrayLike-
ë°°ì´ë¡ ë³íí ë¹ë기 ìí ê°ë¥, ìí ê°ë¥, ëë ì ì¬ ë°°ì´ ê°ì²´ì ëë¤.
mapFnOptional-
ë°°ì´ì 모ë ììì ëí´ í¸ì¶í í¨ìì ëë¤. ì´ í¨ì를 ì ê³µíë©´ ë°°ì´ì ì¶ê°í 모ë ê°ì´ ì´ í¨ìë¡ ë¨¼ì ì ë¬ëê³ , (awaitë í)
mapFnì ë°í ê°ì´ ëì ë°°ì´ì ì¶ê°ë©ëë¤. ì´ í¨ìë ë¤ì ì¸ì를 ì¬ì©íì¬ í¸ì¶ë©ëë¤. thisArgOptional-
mapFnì ì¤íí ëthisê°ì¼ë¡ ì¬ì©í ê°ì ëë¤.
ë°í ê°
ì´í ê°ì´ ì Array ì¸ì¤í´ì¤ì¸ ìë¡ì´ Promiseì
ëë¤.
ì¤ëª
Array.fromAsync()ì ë¤ìì¼ë¡ë¶í° ë°°ì´ì ë§ë¤ ì ììµëë¤.
- ë¹ë기 ìí ê°ë¥ ê°ì²´(
ReadableStreamìAsyncGeneratorê°ì ê°ì²´). ëë, ê°ì²´ê° ë¹ë기 ìí ê°ë¥ì´ ìëë¼ë©´, - ìí ê°ë¥ ê°ì²´(
Mapê³¼Setê°ì ê°ì²´). ëë, ê°ì²´ê° ìí ê°ë¥ì´ ìëë¼ë©´ - ì ì¬ ë°°ì´ ê°ì²´(
lengthìì±ê³¼ ì¸ë±ì¤ë ììê° ìë ê°ì²´).
Array.fromAsync()ë for await...ofì ë§¤ì° ì ì¬í ë°©ìì¼ë¡ ë¹ë기 ìí ê°ë¥ì ìíí©ëë¤. Array.fromAsync()ë ë¤ìì ì ì¸íê³ ëì 측면ìì Array.from()ê³¼ ê±°ì ëì¼í©ëë¤.
Array.fromAsync()ë ë¹ë기 ìí ê°ë¥ ê°ì²´ë¥¼ ì²ë¦¬í©ëë¤.Array.fromAsync()ë ë°°ì´ ì¸ì¤í´ì¤ì ì´ííëPromise를 ë°íí©ëë¤.- ë¹ë기 ìí ê°ë¥ ê°ì²´ë¡
Array.fromAsync()를 í¸ì¶íë©´ ë°°ì´ì ì¶ê°í ê° ììê° ë¨¼ì awaitë©ëë¤. mapFnì´ ì ê³µëë©´, ê·¸ ì ë ¥ê³¼ ì¶ë ¥ì´ ë´ë¶ì ì¼ë¡ await ë©ëë¤.
Array.fromAsync()ì Promise.all()ì 모ë íë¡ë¯¸ì¤ì ìí ê°ë¥ì ë°°ì´ì íë¡ë¯¸ì¤ë¡ ë³íí ì ììµëë¤. íì§ë§ ë ê°ì§ ì¤ìí ì°¨ì´ì ì´ ììµëë¤.
Array.fromAsync()ë ê°ì²´ìì yieldë ê° ê°ì ìì°¨ì ì¼ë¡ await í©ëë¤.Promise.all()ì 모ë ê°ì ëìì await í©ëë¤.Array.fromAsync()ë ìí ê°ë¥ì ì§ì°(lazy) ìííê³ , íì¬ ê°ì´ íì ë ëê¹ì§ ë¤ì ê°ì ê°ì ¸ì¤ì§ ììµëë¤.Promise.all()ì 모ë ê°ì 미리 ê°ì ¸ì¤ê³ 모ë await í©ëë¤.
ìì
>ë¹ë기 ìí ê°ë¥ìì ë°°ì´ ë§ë¤ê¸°
const asyncIterable = (async function* () {
for (let i = 0; i < 5; i++) {
await new Promise((resolve) => setTimeout(resolve, 10 * i));
yield i;
}
})();
Array.fromAsync(asyncIterable).then((array) => console.log(array));
// [0, 1, 2, 3, 4]
ë기 ìí ê°ë¥ìì ë°°ì´ ë§ë¤ê¸°
Array.fromAsync(
new Map([
[1, 2],
[3, 4],
]),
).then((array) => console.log(array));
// [[1, 2], [3, 4]]
íë¡ë¯¸ì¤ë¥¼ yieldíë ë기 ìí ê°ë¥ìì ë°°ì´ ë§ë¤ê¸°
Array.fromAsync(
new Set([Promise.resolve(1), Promise.resolve(2), Promise.resolve(3)]),
).then((array) => console.log(array));
// [1, 2, 3]
íë¡ë¯¸ì¤ ì ì¬ ë°°ì´ ê°ì²´ìì ë°°ì´ ë§ë¤ê¸°
Array.fromAsync({
length: 3,
0: Promise.resolve(1),
1: Promise.resolve(2),
2: Promise.resolve(3),
}).then((array) => console.log(array));
// [1, 2, 3]
mapFn ì¬ì©í기
mapFnì ì
ë ¥ê³¼ ì¶ë ¥ì 모ë Array.fromAsync()ìì ë´ë¶ì ì¼ë¡ await ë©ëë¤.
function delayedValue(v) {
return new Promise((resolve) => setTimeout(() => resolve(v), 100));
}
Array.fromAsync(
[delayedValue(1), delayedValue(2), delayedValue(3)],
(element) => delayedValue(element * 2),
).then((array) => console.log(array));
// [2, 4, 6]
Promise.all()ê³¼ ë¹êµí기
Array.fromAsync()ë ê°ì²´ìì yield ê° ê°ì ìì°¨ì ì¼ë¡ await í©ëë¤. Promise.all()ì 모ë ê°ì ëìì await í©ëë¤.
function* makeAsyncIterable() {
for (let i = 0; i < 5; i++) {
yield new Promise((resolve) => setTimeout(resolve, 100));
}
}
(async () => {
console.time("Array.fromAsync() ìê°");
await Array.fromAsync(makeAsyncIterable());
console.timeEnd("Array.fromAsync() ìê°");
// Array.fromAsync() ìê°: 503.610ms
console.time("Promise.all() ìê°");
await Promise.all(makeAsyncIterable());
console.timeEnd("Promise.all() ìê°");
// Promise.all() ìê°: 101.728ms
})();
ë기 ìí ê°ë¥ì ëí ì¤ë¥ ì²ë¦¬ ìì
for await...ofì ê²½ì°ì ë§ì°¬ê°ì§ë¡, ìíëë ê°ì²´ê° ë기 ìí ê°ë¥ì´ê³ , ìííë ëì ì¤ë¥ê° ë°ìíë©´, 기본 ë°ë³µìì return() ë©ìëê° í¸ì¶ëì§ ìì¼ë¯ë¡ ë°ë³µìê° ì¢
ë£ëì§ ììµëë¤.
function* generatorWithRejectedPromises() {
try {
yield 0;
yield Promise.reject(3);
} finally {
console.log("finally í¸ì¶");
}
}
(async () => {
try {
await Array.fromAsync(generatorWithRejectedPromises());
} catch (e) {
console.log(e, "ì¡ì");
}
})();
// 3 ì¡ì
// "finally í¸ì¶" ë©ìì§ ìì
ë°ë³µì를 ì¢
ë£í´ì¼ íë ê²½ì°, for...of 루í를 ëì ì¬ì©íê³ , ê° ê°ì ì§ì await í´ì¼ í©ëë¤.
(async () => {
const arr = [];
try {
for (const val of generatorWithRejectedPromises()) {
arr.push(await val);
}
} catch (e) {
console.log(e, "ì¡ì");
}
})();
// finally í¸ì¶
// 3 ì¡ì
ëª ì¸ì
| Specification |
|---|
| ES Array.fromAsync > # sec-array.fromAsync > |