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`代码块可以捕获这个错误,导致程序报错,中断执行。
|
||||
|
||||
`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`方法。
|
||||
|
||||
```javascript
|
||||
|
Loading…
x
Reference in New Issue
Block a user