1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-24 10:22:23 +00:00

docs(generator): update example

This commit is contained in:
qijizh 2023-05-15 02:51:11 +08:00 committed by GitHub
parent 87d5dedb2d
commit 982f4983a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -552,26 +552,26 @@ g.throw(1);
上面代码中,`g.throw(1)`执行时,`next`方法一次都没有执行过。这时,抛出的错误不会被内部捕获,而是直接在外部抛出,导致程序出错。这种行为其实很好理解,因为第一次执行`next`方法,等同于启动执行 Generator 函数的内部代码,否则 Generator 函数还没有开始执行,这时`throw`方法抛错只可能抛出在函数外部。
`throw`方法被捕获以后,会附带执行下一条`yield`表达式。也就是说,会附带执行一次`next`方法。
`throw`方法被内部捕获以后,会附带执行到下一条`yield`表达式,这种情况下等同于执行一次`next`方法。
```javascript
var gen = function* gen(){
try {
yield console.log('a');
yield 1;
} catch (e) {
// ...
yield 2;
}
yield console.log('b');
yield console.log('c');
yield 3;
}
var g = gen();
g.next() // a
g.throw() // b
g.next() // c
g.next() // { value:1, done:false }
g.throw() // { value:2, done:false }
g.next() // { value:3, done:false }
g.next() // { value:undefined, done:true }
```
上面代码中,`g.throw`方法被捕获以后,自动执行了一次`next`方法,所以会打印`b`。另外,也可以看到,只要 Generator 函数内部部署了`try...catch`代码块,那么遍历器的`throw`方法抛出的错误,不影响下一次遍历。
上面代码中,`g.throw`方法被内部捕获以后,等同于执行了一次`next`方法,所以返回`{ value:2, done:false }`。另外,也可以看到,只要 Generator 函数内部部署了`try...catch`代码块,那么遍历器的`throw`方法抛出的错误,不影响下一次遍历。
另外,`throw`命令与`g.throw`方法是无关的,两者互不影响。