ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Generator 与 asnyc await

2022-03-01 23:05:12  阅读:184  来源: 互联网

标签:Generator await value next Promise yield done asnyc gen


Generator 生成器函数,返回一个迭代器对象,可以手动调用 next 方法来控制执行,throw 方法抛出错误,return 方法来提前结束,也可以使用 for...of 自动遍历遍历。

function* gen() {
  yield 1;
  yield 2;
  yield 3;
}

let g = gen();
g.next(); // output: { value: 1, done: false }
g.next(); // output: { value: 2, done: false }
g.next(); // output: { value: 3, done: false }
g.next(); // output: { value: undefined, done: true }

for (const value of gen()) {
  console.log('value :>> ', value);
}
// output:
// value :>>  1
// value :>>  2
// value :>>  3

asnyc await 其实就是 Generator 的语法糖,只不过内置一个执行器,其返回值是一个 Promise 对象。

function* gen() {
  let a = yield Promise.resolve(1);
  let b = yield Promise.resolve(2);
  return 'end';
}

function run() {
  return new Promise((res, rej) => {
    try {
      const g = a();

      function next(data) {
        let n = g.next(data);
        if (n.done) return res(n.value);
        Promise.resolve(n.value).then(next, g.throw);
      }

      next();
    } catch (error) {
      rej(error);
    }
  });
}

run(gen);

标签:Generator,await,value,next,Promise,yield,done,asnyc,gen
来源: https://www.cnblogs.com/mengyuantongxue/p/15953053.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有