Generator 与 Promise 一起使用 简单实现 await

function* bar() {
  const result = yield new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('Hello Generator');
    }, 3000);
  });

  console.log(result);
}

var it = bar();
it.next().value.then(res => {
  // 将获取到到 promise 值再传到 generator 内 
  // result就能接收到 异步的值 简单实现了异步函数同步编写的效果
  it.next(res)
})

如果对上面不是很理解可以看看下面简单的代码

function* gn() {
  var gitem = yield 4;
  console.log(gitem)
}

var git = gn()
git.next();
// 执行下面next 就会打印出 9 了
// 其实第二次将 9 是赋值到 gitem 变量上 然后再接着执行下面的语句
git.next(9);

 

推荐看 阮一峰的教程https://es6.ruanyifeng.com/?search=filter&x=0&y=0#docs/generator#next%E3%80%81throw%E3%80%81return-%E7%9A%84%E5%85%B1%E5%90%8C%E7%82%B9

posted @ 2020-07-23 20:32  林中有风  阅读(245)  评论(0编辑  收藏  举报