Generator.prototype.throw()
åºçº¿
广æ³å¯ç¨
èª 2016å¹´9æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
Generator å®ä¾ç throw() æ¹æ³çä½ç¨å°±å¥½åä¸ä¸ª throw è¯å¥è¢«æå
¥å°çæå¨ä¸»ä½çå½åæåä½ç½®ï¼è¿ä¼éç¥çæå¨é误çæ
åµå¹¶å
许å
¶å¤çéè¯¯ï¼æè
æ§è¡æ¸
çåèªè¡å
³éã
è¯æ³
generatorInstance.throw(exception)
åæ°
è¿åå¼
妿æåºçå¼å¸¸è¢« try...catch æè·å¹¶ä¸çæå¨æ¢å¤çææ´å¤çå¼ï¼å®å°è¿åä¸ä¸ª Objectï¼å¸¦æä¸¤ä¸ªå±æ§ï¼
å¼å¸¸
妿æåºçé误没æè¢« try...catch æè·ï¼åä¼ ç» throw() ç exception å°ä»çæå¨å½æ°ä¸æåºã
æè¿°
throw() æ¹æ³å¨è¢«è°ç¨æ¶ï¼å¯ä»¥ç使¯å¨çæå¨ä¸»ä½å½åæåçä½ç½®æå
¥äºä¸ä¸ª throw exception; è¯å¥ï¼å
¶ä¸ exception æ¯ä¼ å
¥ç» throw() æ¹æ³çå¼å¸¸ãå æ¤ï¼å¨å
¸åçæµç¨ä¸ï¼è°ç¨ throw(exception) å°ä¼å¯¼è´çæå¨æåºå¼å¸¸ãç¶èï¼å¦æ yield 表达å¼è¢«å
å«å¨ try...finally åä¸ï¼é误å¯è½ä¼è¢«æè·ï¼å¹¶ä¸æ§å¶æµå¯ä»¥å¨é误å¤ç忢å¤ï¼æè
æ£å¸¸éåºã
示ä¾
>ä½¿ç¨ throw()
以ä¸ç¤ºä¾å±ç¤ºäºä¸ä¸ªç®åçæå¨åä½¿ç¨ throw æ¹æ³æåºçé误ãåå¾å¸¸ä¸æ ·ï¼é误å¯ä»¥éè¿ try...catch åæè·ã
function* gen() {
while (true) {
try {
yield 42;
} catch (e) {
console.log("æè·å°é误ï¼");
}
}
}
const g = gen();
g.next();
// { value: 42, done: false }
g.throw(new Error("åºç°äºäºé®é¢"));
// "æè·å°é误ï¼"
// { value: 42, done: false }
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-generator.prototype.throw> |