美文网首页
es6 生成器

es6 生成器

作者: 冷暖自知_zjz | 来源:发表于2023-05-12 18:55 被阅读0次

使用ES6的yield和generator函数可以模拟实现async/await的功能,具体实现方法如下:

function* asyncFunction (){
  try {
    // 异步操作
    const result = yield promise;
    console.log(result);
  } catch (error) {
    console.error(error);
  }
}

// 调用方法
const generateAsync = asyncFunction();
const asyncExecute = generateAsync.next();
asyncExecute.value.then(result =>{
  generateAsync.next(result);
}).catch(error => {
  generateAsync.throw(error);
});

在这里,我们首先定义一个generator函数asyncFunction,其内部包含异步操作,并通过yield关键字将流程分割成若干段,在异步操作完成时将结果返回。在调用函数时,我们可以使用对象的next方法依次执行yield命令的部分,直到整个异步操作流程结束。

以上是一个简略的实现方式,并不是完整的async/await实现,因为async/await还包含了一些其他的特性,例如自动捕获异常等等。但是使用这种方式,我们也可以达到一定程度上类似于async/await的效果。

function getFoo () {
  return new Promise(function (resolve, reject){
    resolve('foo');
  });
}

const g = function* () {
  try {
    const foo = yield getFoo();
    console.log(foo);
  } catch (e) {
    console.log(e);
  }
};

function run (generator) {
  const it = generator();

  function go(result) {
    if (result.done) return result.value;

    return result.value.then(function (value) {
      return go(it.next(value));
    }, function (error) {
      return go(it.throw(error));
    });
  }

  go(it.next());
}

run(g);

相关文章

  • 解析 ES6 中 yieId 与 Generator

    yieId :yield是 ES6 的新关键字,使生成器函数执行暂停 Generator:(生成器)是ES6标准引...

  • JavaScript设计模式-0001---迭代器模式

    使用闭包实现迭代器 test es6使用 生成器实完成迭代器模式 使用es6的生成器实现数据自增 迭代器/es6的...

  • ES6-ES13新特性

    ES6(ECMAScript 2015) ES6 正式支持了类、模块、迭代器、生成器、箭头函数、Promise、反...

  • ES5 实现 ES6 生成器 (下)

    在上一篇文章中,我们简单了解了 ES6 生成器。在这一篇文章章中,我将使用 ES5 的代码实现 ES6 生成器的部...

  • 📒【异步】7. 生成器 & 迭代器 & for..of

    ES6生成器(generator)让一种顺序、看似同步的异步流程控制表达风格成为可能。 生成器 生成器是一类特殊的...

  • Generator(一)

    要理解生成器,先理解迭代器。因为生成器就是返回一个迭代器的函数。 ES5实现的迭代器 ES6中的生成器用法: 生成...

  • 20.ES6中Generator生成器

    Generator是ES6的生成器1、Generator 函数是 ES6 提供的一种异步编程解决方案,在函数中可以...

  • ES5 实现 ES6 生成器 (上)

    在编写生成器的实现代码之前,首先来介绍一下生成器。生成器是 ES6 的新特性,可以实现代码的暂停,类似于下方的代码...

  • function* 生成器函数

    ES6中定义了一种新的函数.用function*定义生成器函数,这种函数会返回一个generator对象.生成器函...

  • Generator函数实现斐波那契数列

    ES6 中 generator生成器函数 特点: 调用generator函数返回一个迭代器(iterator)对象...

网友评论

      本文标题:es6 生成器

      本文链接:https://www.haomeiwen.com/subject/mvtysdtx.html