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

修改docs/generator

This commit is contained in:
Ruan Yifeng 2015-01-25 22:58:24 +08:00
parent 4f7f2ea8eb
commit ed562a470f
2 changed files with 55 additions and 0 deletions

View File

@ -113,6 +113,8 @@ for (var f of flat(arr)){
```javascript ```javascript
var arr = [1, [[2, 3], 4], [5, 6]];
var flat = function* (a){ var flat = function* (a){
var length = a.length; var length = a.length;
for(var i =0;i<length;i++){ 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方法的参数 ### 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命令后面加上星号表明它返回的是一个遍历器。这被称为yield*语句。 如果yield命令后面跟的是一个遍历器需要在yield命令后面加上星号表明它返回的是一个遍历器。这被称为yield*语句。

View File

@ -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的综合介绍 - 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可以被当作数据结构看待 - 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用于实现状态机 - 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对象 ## Promise对象