9,Promise同步写法,异步实现

2019-11-18  本文已影响0人  r8HZGEmq

为什么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);
});
上一篇 下一篇

猜你喜欢

热点阅读