Baseline 2024
Newly available
Array.fromAsync()
éææ¹æ³å¯ä»¥ç±ä¸ä¸ªå¼æ¥å¯è¿ä»£å¯¹è±¡ãå¯è¿ä»£å¯¹è±¡æç±»æ°ç»å¯¹è±¡å建ä¸ä¸ªæ°çãæµ
æ·è´ç Array
å®ä¾ã
Array.fromAsync(arrayLike)
Array.fromAsync(arrayLike, mapFn)
Array.fromAsync(arrayLike, mapFn, thisArg)
åæ°
arrayLike
è¦è½¬æ¢ä¸ºæ°ç»ç弿¥å¯è¿ä»£ãå¯è¿ä»£æç±»æ°ç»å¯¹è±¡ã
mapFn
å¯é
为æ°ç»ä¸çæ¯ä¸ªå
ç´ æ§è¡ç彿°ã妿æä¾äºè¯¥å½æ°ï¼åæ¯ä¸ªè¦æ·»å å°æ°ç»ä¸çå¼é½ä¼å
éè¿è¯¥å½æ°å¤çï¼mapFn
çè¿åå¼å°ä»£æ¿è¯¥å¼è¢«æ·»å å°æ°ç»ä¸ï¼å¨çå¾
å
ç°åï¼ãè¯¥å½æ°è¢«è°ç¨æ¶å°ä¼ å
¥ä»¥ä¸åæ°ï¼
element
æ°ç»ä¸å½åæ£å¨å¤ççå ç´ ãç±äºææå ç´ é½ä¼å çå¾ å ¶å ç°ï¼å æ¤è¯¥å¼æ°¸è¿ä¸ä¼æ¯ thenableã
index
æ£å¨å¤ççå ç´ å¨æ°ç»ä¸çç´¢å¼ã
thisArg
å¯é
æ§è¡ mapFn
æ¶ç¨ä½ this
çå¼ã
ä¸ä¸ªæ°ç Promise
ï¼å
¶å
ç°å¼æ¯ä¸ä¸ªæ°ç Array
å®ä¾ã
Array.fromAsync()
å
è®¸ä½ ä»ä»¥ä¸å¯¹è±¡ä¸å建æ°ç»ï¼
ReadableStream
å AsyncGenerator
ï¼ï¼æè
ï¼å¦æå¯¹è±¡ä¸æ¯å¼æ¥å¯è¿ä»£çï¼Map
å Set
ï¼ï¼æè
ï¼å¦æå¯¹è±¡æ¯ä¸å¯è¿ä»£çï¼length
屿§åç´¢å¼å
ç´ ç对象ï¼ãArray.fromAsync()
è¿ä»£å¼æ¥å¯è¿ä»£å¯¹è±¡çæ¹å¼ä¸ for await...of
å¾ç¸ä¼¼ãArray.fromAsync()
å¨è¡ä¸ºä¸ä¸ Array.from()
å ä¹çä»·ï¼é¤äºä»¥ä¸å ç¹ï¼
Array.fromAsync()
å¯ä»¥å¤ç弿¥å¯è¿ä»£å¯¹è±¡ãArray.fromAsync()
è¿åä¸ä¸ªä¼å
ç°ä¸ºæ°ç»å®ä¾ç Promise
ãArray.fromAsync()
ï¼åè¦æ·»å å°æ°ç»ä¸çæ¯ä¸ªå
ç´ ï¼æ 论æ¯å¦ä¸º Promiseï¼é½ä¼å
çå¾
å
¶å
ç°ãmapFn
ï¼åå
¶è¾å
¥åè¾åºä¼å¨å
é¨çå¾
å
ç°ãArray.fromAsync()
å Promise.all()
é½å¯ä»¥å°ä¸ä¸ª promise å¯è¿ä»£å¯¹è±¡è½¬æ¢ä¸ºä¸ä¸ªæ°ç»ç promiseãç¶èï¼å®ä»¬æä¸¤ä¸ªå
³é®åºå«ï¼
Array.fromAsync()
ä¼ä¾æ¬¡çå¾
对象ä¸äº§ççæ¯ä¸ªå¼å
ç°ãPromise.all()
ä¼å¹¶è¡çå¾
ææå¼å
ç°ãArray.fromAsync()
æ°æ§è¿ä»£å¯è¿ä»£å¯¹è±¡ï¼å¹¶ä¸ä¸ä¼è·åä¸ä¸ä¸ªå¼ï¼ç´å°å½åå¼è¢«å
ç°ãPromise.all()
é¢å
è·åææå¼å¹¶çå¾
å®ä»¬å
¨é¨å
ç°ã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]]
ä»äº§ç promise ç忥å¯è¿ä»£å¯¹è±¡å建æ°ç»
Array.fromAsync(
new Set([Promise.resolve(1), Promise.resolve(2), Promise.resolve(3)]),
).then((array) => console.log(array));
// [1, 2, 3]
ä» promise çç±»æ°ç»å¯¹è±¡å建æ°ç»
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
Array.fromAsync()
å
é¨ä¼çå¾
mapFn
çè¾å
¥åè¾åºçå
ç°ã
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()
ä¼ä¾æ¬¡çå¾
对象ä¸äº§ççæ¯ä¸ªå¼å
ç°ãPromise.all()
ä¼å¹¶è¡çå¾
ææå¼å
ç°ã
function* makeAsyncIterable() {
for (let i = 0; i < 5; i++) {
yield new Promise((resolve) => setTimeout(resolve, 100));
}
}
(async () => {
console.time("Array.fromAsync() time");
await Array.fromAsync(makeAsyncIterable());
console.timeEnd("Array.fromAsync() time");
// Array.fromAsync() time: 503.610ms
console.time("Promise.all() time");
await Promise.all(makeAsyncIterable());
console.timeEnd("Promise.all() time");
// Promise.all() time: 101.728ms
})();
没æå¯¹åæ¥å¯è¿ä»£å¯¹è±¡çé误å¤ç
å¦æè¢«è¿ä»£ç对象æ¯åæ¥å¯è¿ä»£å¯¹è±¡ï¼å¹¶ä¸å¨è¿ä»£æ¶æåºé误ï¼ç±»ä¼¼äº for await...of
ï¼åºå±è¿ä»£å¨ç return()
æ¹æ³å°ä¸ä¼è¢«è°ç¨ï¼å æ¤è¿ä»£å¨ä¸ä¼è¢«å
³éã
function* generatorWithRejectedPromises() {
try {
yield 0;
yield Promise.reject(3);
} finally {
console.log("called finally");
}
}
(async () => {
try {
await Array.fromAsync(generatorWithRejectedPromises());
} catch (e) {
console.log("caught", e);
}
})();
// caught 3
// 没æâcalled finallyâä¿¡æ¯
妿éè¦å
³éè¿ä»£å¨ï¼åéè¦ä½¿ç¨ for...of
循ç¯ï¼å¹¶æå¨çå¾
æ¯ä¸ªå¼å
ç°ã
(async () => {
const arr = [];
try {
for (const val of generatorWithRejectedPromises()) {
arr.push(await val);
}
} catch (e) {
console.log("caught", e);
}
})();
// called finally
// caught 3
è§è æµè§å¨å
¼å®¹æ§ åè§
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4