mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-24 18:32:22 +00:00
docs(generator): edit throw
This commit is contained in:
parent
7d5a56292a
commit
2d86fc3f9c
@ -534,6 +534,24 @@ g.throw();
|
|||||||
|
|
||||||
上面代码中,`g.throw`抛出错误以后,没有任何`try...catch`代码块可以捕获这个错误,导致程序报错,中断执行。
|
上面代码中,`g.throw`抛出错误以后,没有任何`try...catch`代码块可以捕获这个错误,导致程序报错,中断执行。
|
||||||
|
|
||||||
|
`throw`方法抛出的错误要被内部捕获,前提是必须至少执行过一次`next`方法。
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
function* gen() {
|
||||||
|
try {
|
||||||
|
yield 1;
|
||||||
|
} catch (e) {
|
||||||
|
console.log('内部捕获');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var g = gen();
|
||||||
|
g.throw(1);
|
||||||
|
// Uncaught 1
|
||||||
|
```
|
||||||
|
|
||||||
|
上面代码中,`g.throw(1)`执行时,`next`方法一次都没有执行过。这时,抛出的错误不会被内部捕获,而是直接在外部抛出,导致程序出错。这种行为其实很好理解,因为第一次执行`next`方法,等同于启动执行 Generator 函数的内部代码,否则 Generator 函数还没有开始执行,这时`throw`方法抛错只可能抛出在函数外部。
|
||||||
|
|
||||||
`throw`方法被捕获以后,会附带执行下一条`yield`表达式。也就是说,会附带执行一次`next`方法。
|
`throw`方法被捕获以后,会附带执行下一条`yield`表达式。也就是说,会附带执行一次`next`方法。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
|
Loading…
x
Reference in New Issue
Block a user