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
|
```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*语句。
|
||||||
|
@ -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对象
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user