Generator

概念

Generator 函数是协程在ES6的实现,最大的特点就是可以交出函数的执行权(即暂停执行)。

1
2
3
4
function* gen(x) {
var y = yield x + 2;
return y;
}

generator函数是一个封装的异步任务。执行:

1
2
3
let g = gen(1);
g.next()// {value: 3, done: false}
g.next()// {value: undefined, done: true}

调用generator函数会返回一个iterator,其next方法会返回一个对象,表示当前阶段的信息,包括value属性(yield语句后面表达式的值),done表示是否执行完毕。

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
var fetch = require('node-fetch');

function* gen() {
var url = 'https://api.github.com/user/github';
var result = yield fetch(url);//return a Promise
console.log(result.bio);
}

var g = gen();
var result = g.next();
result.value.then(function(data){
return data.json();
}).then(function(data))

Comments