举个例子,一目了然(代码好长,不想打出来了)
用中文描述就是:
在ajax请求成功的方法内,执行迭代器的next方法,并且传入请求成功返回的参数。使生成器继续执行。(把返回参数的下一步操作放生成器中。。。)
术语就是:把异步作为实现的细节抽象了出去,使我们可以以同步顺序的形式追踪流程控制。
生成器+promise
var fetch = require('node-fetch');
function* gen(){
var url = 'https://api.github.com/users/github';
var result = yield fetch(url);
console.log(result.bio);
}
上面代码中,Generator
函数封装了一个异步操作,该操作先读取一个远程接口,然后从 JSON
格式的数据解析信息。就像前面说过的,这段代码非常像同步操作,除了加上了yield
命令。
执行这段代码的方法如下。
var g = gen();
var result = g.next();
result.value.then(function(data){
return data.json();
}).then(function(data){
g.next(data);
});
上面代码中,首先执行 Generator
函数,获取遍历器对象,然后使用next
方法(第二行),执行异步任务的第一阶段。由于Fetch
模块返回的是一个Promise
对象,因此要用then
方法调用下一个next
方法。
又看完几页书,还是没有讲到async
和await
。好!继续看