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

Posted passerbyone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于Generator 与 Promise 一起使用 简单实现 await的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript异步编程:Generator与Async

Symbol + Generator函数 + Promise

Promise和Generator

promise generator aysnc/await

引入Promise对象和Generator生成器函数

迭代器,生成器(generator)和Promise的“微妙”关系