async function* 表达å¼
åºçº¿
广æ³å¯ç¨
èª 2020å¹´1æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
async function* å
³é®åå¯ç¨äºå¨è¡¨è¾¾å¼ä¸å®ä¹ä¸ä¸ªå¼æ¥çæå¨å½æ°ã
ä½ ä¹å¯ä»¥ä½¿ç¨ async function* 声æå®ä¹ä¸ä¸ªå¼æ¥çæå¨å½æ°ã
å°è¯ä¸ä¸
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"
è¯æ³
async function* (param0) {
statements
}
async function* (param0, param1) {
statements
}
async function* (param0, param1, /* ⦠,*/ paramN) {
statements
}
async function* name(param0) {
statements
}
async function* name(param0, param1) {
statements
}
async function* name(param0, param1, /* ⦠,*/ paramN) {
statements
}
夿³¨ï¼ä¸ºäºé¿å
async function* 声ææå¸¦æ¥çæ§ä¹ï¼è¡¨è¾¾å¼è¯å¥ä¸è½ä»¥å
³é®å async function å¼å¤´ãasync function å
³é®åä»
å¨ä¸ä¸æä¸æ æ³æ¥åè¯å¥æ¶ï¼æä¼è¢«è§ä¸ºè¡¨è¾¾å¼çå¼å¤´ã
åæ°
nameå¯é-
彿°åãå¨è¿ç§æ åµä¸ï¼å½æ°åæ¯å¿åçï¼å¯ä»¥è¢«çç¥ã该åç§°ä» å¨å½æ°ä¸»ä½çå 鍿æã
paramNå¯é-
ä¼ éç»å½æ°çåæ°åç§°ã
statementså¯é-
ææå½æ°ä¸»ä½çè¯å¥ã
æè¿°
async function* 表达å¼ä¸ async function* 声æé常ç¸ä¼¼ï¼è¯æ³å ä¹ç¸åã彿°åæ¯ async function* 表达å¼å async function* 声æä¹é´æä¸»è¦çåºå«ï¼å¨ async function* 表达å¼ä¸ï¼å¯ä»¥å建å¿å彿°å»å¿½ç¥å½æ°åãasync function* 表达å¼å¯ä»¥ç¨ä½ç«å³è°ç¨å½æ°è¡¨è¾¾å¼ï¼IIFEï¼ï¼è¯¥è¡¨è¾¾å¼å¨è¢«å®ä¹åç«å³è¿è¡ï¼å
è®¸ä½ å»å建ä¸ä¸ªä¸´æ¶ç弿¥çå¯è¿ä»£å¯¹è±¡ãæå
³æ´å¤ä¿¡æ¯ï¼è¯·åè§å½æ°è¿ä¸ªç« èã
示ä¾
>ä½¿ç¨ async function*
以ä¸ç¤ºä¾å®ä¹äºä¸ä¸ªæ²¡æåç§°ç弿¥çæå¨å½æ°å¹¶å°å®åé
ç»åé xãè¿ä¸ªå½æ°äº§çå®åæ°çå¹³æ¹ã
const x = async function* (y) {
yield Promise.resolve(y * y);
};
x(6)
.next()
.then((res) => console.log(res.value)); // 36
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-async-generator-function-definitions> |
æµè§å¨å ¼å®¹æ§
åè§
async function*è¯å¥AsyncGeneratorFunction对象- è¿ä»£åè®®
GeneratorFunction对象yieldyield*Function对象- 彿°