Baseline Widely available
AsyncGenerator
对象ç±å¼æ¥çæå¨å½æ°è¿åï¼å¹¶ä¸å®ç¬¦å弿¥å¯è¿ä»£åè®®å弿¥è¿ä»£å¨åè®®ã
弿¥çæå¨æ¹æ³æ»æ¯äº§ç Promise
对象ã
AsyncGenerator
æ¯éèç±» AsyncIterator
çåç±»ã
async function* foo() {
yield await Promise.resolve("a");
yield await Promise.resolve("b");
yield await Promise.resolve("c");
}
let str = "";
async function generate() {
for await (const val of foo()) {
str = str + val;
}
console.log(str);
}
generate();
// Expected output: "abc"
æé 彿°
AsyncGenerator
æé 彿°å¹¶éå
¨å±å¯ç¨çãAsyncGenerator
çå®ä¾å¿
é¡»ä»å¼æ¥çæå¨å½æ°è¿åã
async function* createAsyncGenerator() {
yield await Promise.resolve(1);
yield await Promise.resolve(2);
yield await Promise.resolve(3);
}
const asyncGen = createAsyncGenerator();
asyncGen.next().then((res) => console.log(res.value)); // 1
asyncGen.next().then((res) => console.log(res.value)); // 2
asyncGen.next().then((res) => console.log(res.value)); // 3
å®é
ä¸ï¼å¹¶æ²¡æå¯¹åº AsyncGenerator
æé 彿°ç JavaScript å®ä½ãåªæä¸ä¸ªéè对象ï¼å
¶æ¯ææç±å¼æ¥çæå¨å½æ°å建ç对象æå
±äº«çåå对象ãè¿ä¸ªå¯¹è±¡éå¸¸è¢«é£æ ¼å为 AsyncGenerator.prototype
æ¥ä½¿å
¶çèµ·æ¥åæ¯ä¸ä¸ªç±»ï¼ä½å®æ´æ°å½çç§°å¼åºè¯¥æ¯ AsyncGenerator.prototype.prototype
ï¼å 为 AsyncGeneratorFunction
æ¯ä¸ä¸ªå®é
ç JavaScript å®ä½ã
è¿äºå±æ§å®ä¹å¨ AsyncGenerator.prototype
å¹¶ç±ææ AsyncGenerator
å®ä¾å
±äº«ã
AsyncGenerator.prototype.constructor
ç¨äºå建å®ä¾å¯¹è±¡çæé 彿°ãå¯¹äº AsyncGenerator
å®ä¾ï¼åå§å¼æ¯ AsyncGeneratorFunction.prototype
ã
夿³¨ï¼ AsyncGenerator
对象并ä¸ä¼åå¨å建å®ä»¬ç弿¥çæå¨å½æ°çå¼ç¨ã
AsyncGenerator.prototype[Symbol.toStringTag]
[Symbol.toStringTag]
屿§çåå§å¼æ¯å符串 "AsyncGenerator"
ãè¯¥å±æ§å¨ Object.prototype.toString()
ä¸ä½¿ç¨ã
ä¹ä»å
¶ç¶ç±» AsyncIterator
ç»§æ¿å®ä¾æ¹æ³ã
AsyncGenerator.prototype.next()
è¿å Promise
ï¼å®å°éè¿ yield
表达å¼äº§ççç»å®å¼å
ç°ã
AsyncGenerator.prototype.return()
就好åå¨çæå¨çæåä½ç½®æå
¥ä¸ä¸ª return
è¯å¥ï¼è¿å°ç»æçæå¨å¹¶å
许çæå¨æ§è¡ä»»ä½æ¸
çä»»å¡ï¼å°¤å
¶æ¯ä¸ try...finally
åç»åçæ¶åã
AsyncGenerator.prototype.throw()
就好åå¨çæå¨çæåä½ç½®æå
¥ä¸ä¸ª throw
è¯å¥ï¼è¿å°éç¥çæå¨é误çç¶åµå¹¶å
许å»å¤çéè¯¯ï¼æè
æ§è¡æ¸
çæä½å¹¶å
³éå®èªå·±ã
以ä¸ç¤ºä¾å°éåè¿ä»£å¼æ¥çæå¨ï¼ä»¥éåçæ¶é´é´éå°å¼ 1-6 æå°å°æ§å¶å°ã注æï¼æ¯æ¬¡äº§ç Promise çæ¶åï¼å®ä¼å¨ for await...of
循ç¯ä¸èªå¨å°å
ç°ã
// 弿¥ä»»å¡ãå设å®å¨å®è·µä¸åäºä¸äºæ´æç¨çäºæ
ã
function delayedValue(time, value) {
return new Promise((resolve /*, reject*/) => {
setTimeout(() => resolve(value), time);
});
}
async function* generate() {
yield delayedValue(2000, 1);
yield delayedValue(100, 2);
yield delayedValue(500, 3);
yield delayedValue(250, 4);
yield delayedValue(125, 5);
yield delayedValue(50, 6);
console.log("å
¨é¨å®æï¼");
}
async function main() {
for await (const value of generate()) {
console.log("å¼", value);
}
}
main().catch((e) => console.error(e));
è§è æµè§å¨å
¼å®¹æ§ åè§
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