返回

ES6 时代的 Generator,自动为你执行

前端

ES6 时代的 Generator,自动为你执行

ES6 的 Generator 函数,提供了一种简便的异步编程方式。它通过生成器函数返回一个迭代器,你可以使用 next() 方法逐步执行异步任务,并使用 yield 将结果返回给调用者。

Generator 函数的语法

function* generatorFunction() {
  yield expression;
  yield expression;
}

在函数关键词后面增加一个星号 *,表示这是一个 generator 函数。函数体内部使用 yield 来生成值,generator 函数返回的是一个迭代器。

Generator 函数的使用

const generator = generatorFunction();
const result1 = generator.next();
const result2 = generator.next();

调用 generator.next() 方法来执行 generator 函数,并获取结果。如果生成器函数中有 yield 表达式,则会返回一个包含 value 和 done 属性的对象,value 是 yield 表达式的值,done 是一个布尔值,表示生成器函数是否已完成执行。

Generator 函数的自动执行
ES6 中的 Generator 函数支持自动执行,这意味着你可以直接使用 generator 函数,而不需要显式调用 next() 方法。

async function main() {
  for await (const value of generatorFunction()) {
    console.log(value);
  }
}

使用 async 函数来定义主函数,并在主函数中使用 for await...of 循环来遍历 generator 函数返回的迭代器。这样,generator 函数就会自动执行,并将其结果依次输出到控制台。

Generator 函数的应用场景
Generator 函数可以用于各种异步编程场景,例如:

  • 数据流处理: Generator 函数可以用于处理连续的数据流,例如读取文件、网络请求等。
  • 协程: Generator 函数可以用于实现协程,即多个任务交替执行,共享数据和资源。
  • 异步编程: Generator 函数可以用于实现异步编程,例如使用 async/await 来编写异步代码。

ES6 的 Generator 函数提供了强大的异步编程能力,使开发人员能够编写更简洁、更易读的代码。如果你还没有使用过 Generator 函数,那么不妨试试看,它可能会让你对异步编程有新的认识。