mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-24 18:32:22 +00:00
修改docs/generator
This commit is contained in:
parent
4f7f2ea8eb
commit
ed562a470f
@ -113,6 +113,8 @@ for (var f of flat(arr)){
|
||||
|
||||
```javascript
|
||||
|
||||
var arr = [1, [[2, 3], 4], [5, 6]];
|
||||
|
||||
var flat = function* (a){
|
||||
var length = a.length;
|
||||
for(var i =0;i<length;i++){
|
||||
@ -125,6 +127,11 @@ var flat = function* (a){
|
||||
}
|
||||
};
|
||||
|
||||
for (var f of flat(arr)){
|
||||
console.log(f);
|
||||
}
|
||||
// 1, 2, 3, 4, 5, 6
|
||||
|
||||
```
|
||||
|
||||
### next方法的参数
|
||||
@ -302,6 +309,53 @@ function* g(){
|
||||
|
||||
```
|
||||
|
||||
一旦Generator执行过程中抛出错误,就不会再执行下去了。如果此后还调用next方法,将一直返回发生错误前的那个值。
|
||||
|
||||
```javascript
|
||||
|
||||
function* g() {
|
||||
yield 1;
|
||||
console.log('throwing an exception');
|
||||
throw new Error('generator broke!');
|
||||
yield 2;
|
||||
}
|
||||
|
||||
function log(generator) {
|
||||
var v;
|
||||
console.log('starting generator');
|
||||
try {
|
||||
v = generator.next();
|
||||
console.log('got back', v);
|
||||
} catch (err) {
|
||||
console.log('fixing generator', v);
|
||||
}
|
||||
try {
|
||||
v = generator.next();
|
||||
console.log('got back', v);
|
||||
} catch (err) {
|
||||
console.log('fixing generator', v);
|
||||
}
|
||||
try {
|
||||
v = generator.next();
|
||||
console.log('got back', v);
|
||||
} catch (err) {
|
||||
console.log('fixing generator', v);
|
||||
}
|
||||
console.log('caller done');
|
||||
}
|
||||
|
||||
log(g());
|
||||
// starting generator
|
||||
// got back { value: 1, done: false }
|
||||
// throwing an exception
|
||||
// fixing generator { value: 1, done: false }
|
||||
// fixing generator { value: 1, done: false }
|
||||
// caller done
|
||||
|
||||
```
|
||||
|
||||
上面代码在Generator函数g抛出错误以后,再调用next方法,就不再执行下去了,一直停留在上一次的状态。
|
||||
|
||||
### yield*语句
|
||||
|
||||
如果yield命令后面跟的是一个遍历器,需要在yield命令后面加上星号,表明它返回的是一个遍历器。这被称为yield*语句。
|
||||
|
@ -55,6 +55,7 @@
|
||||
- Gajus Kuizinas, [The Definitive Guide to the JavaScript Generators](http://gajus.com/blog/2/the-definetive-guide-to-the-javascript-generators): 对Generator的综合介绍
|
||||
- Jan Krems, [Generators Are Like Arrays](https://gist.github.com/jkrems/04a2b34fb9893e4c2b5c): 讨论Generator可以被当作数据结构看待
|
||||
- Harold Cooper, [Coroutine Event Loops in Javascript](http://syzygy.st/javascript-coroutines/): Generator用于实现状态机
|
||||
- Ruslan Ismagilov, [learn-generators](https://github.com/isRuslan/learn-generators): 编程练习,共6道题
|
||||
|
||||
## Promise对象
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user