AsyncGenerator.prototype.throw()
åºçº¿
广æ³å¯ç¨
èª 2020å¹´1æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
AsyncGenerator å®ä¾ç throw() æ¹æ³çä½ç¨å°±å¥½åä¸ä¸ª throw è¯å¥è¢«æå
¥å°çæå¨ä¸»ä½çå½åæåä½ç½®ï¼è¿ä¼éç¥çæå¨é误çæ
åµå¹¶å
许å
¶å¤çéè¯¯ï¼æè
æ§è¡æ¸
çåèªè¡å
³éã
è¯æ³
js
asyncGeneratorInstance.throw(exception)
åæ°
è¿åå¼
妿æåºçé误没æè¢«æè·ï¼å®ä¼è¿åä¸ä¸ªä»¥ä¼ å
¥çå¼å¸¸æç»ç Promiseã
妿æåºçå¼å¸¸è¢« try...catch æè·å¹¶ä¸çæå¨æ¢å¤çææ´å¤çå¼ï¼å®å°è¿åä¸ä¸ª Promiseï¼å
¶å
ç°ä¸ºå¸¦æä¸¤ä¸ªå±æ§ç Objectï¼
示ä¾
>ä½¿ç¨ throw()
以ä¸ç¤ºä¾å±ç¤ºäºä¸ä¸ªç®åçæå¨åä½¿ç¨ throw æ¹æ³æåºçé误ãåå¾å¸¸ä¸æ ·ï¼é误å¯ä»¥éè¿ try...catch åæè·ã
js
// 弿¥ä»»å¡ãå设å®å¨å®è·µä¸åäºä¸äºæ´æç¨çäºæ
ã
function sleep(time) {
return new Promise((resolve, reject) => {
setTimeout(resolve, time);
});
}
async function* createAsyncGenerator() {
while (true) {
try {
await sleep(500);
yield 42;
} catch (e) {
console.error(e);
}
}
}
const asyncGen = createAsyncGenerator();
asyncGen.next(1).then((res) => console.log(res)); // { value: 42, done: false }
asyncGen
.throw(new Error("åºäºç¹é®é¢")) // Error: åºäºç¹é®é¢
.then((res) => console.log(res)); // { value: 42, done: false }
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-asyncgenerator-prototype-throw> |