为什么Promise的写法是同步的,但实现了异步操作,即实现了任务的不连续
Generator函数,交出了执行权。Generator容器中会有暂停标志位
function* gen(x) {
var y = yield x + 2;
return y;
}
var g = gen(1);
g.next() // { value: 3, done: false }
g.next() // { value: undefined, done: true }
Generator返回一个内部指针g,而不是返回结果。调用g.next(),会移动内部指针的阶段。next让异步任务的容器Generator,分阶段的执行任务,返回一个对象(value属性和done属性)。done表示是否执行完
再看一个例子:Async/Await也是一个自执行的generate函数
var fetch = require('node-fetch');
function* gen(){ // 这里的*可以看成 async
var url = 'https://api.github.com/users/github';
var result = yield fetch(url); // 这里的yield可以看成 await
console.log(result.bio);
}
// execute
var g = gen();
var result = g.next();
result.value.then(function(data){
return data.json();
}).then(function(data){
g.next(data);
});