异步迭代生成器

举个例子,一目了然(代码好长,不想打出来了)
用中文描述就是:
在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方法。

又看完几页书,还是没有讲到asyncawait。好!继续看

你可能感兴趣的:(异步迭代生成器)