【问题标题】:How to declare async generator function如何声明异步生成器函数
【发布时间】:2017-12-06 14:36:27
【问题描述】:

我正在尝试在 Node.js 中创建异步生成器函数,但这似乎是不可能的。

我的 Node.js 版本:7.6.0。

我的代码

async function* async_generator(){
  for(let i = 0; i < 10; i++){
    yield await call_to_async_func(i);
  };
}

我遇到的错误

有谁知道问题出在哪里?为什么我不能创建异步生成器函数,而我可以独立创建生成器函数或异步函数?

【问题讨论】:

  • 据我所知,在 ES2018 中不存在异步生成器?
  • 有一个提案 (here) 但已被撤回。

标签: javascript node.js async-await generator


【解决方案1】:

它在那里并且确实有效,但目前它位于和谐标志后面。

example.js

async function* async_generator() {
  for (let i = 0; i < 10; i++) {
    yield await new Promise(r => setTimeout(_ => r("hello world"), 100))
  };
}

async function main(){
  for await (let item of async_generator()){
    console.log(item);
  }
}

main().catch(console.log);

运行(在节点 v8.5.0 中适用于我)

node --harmony-async-iteration example.js

请注意,该提案仍处于第 3 阶段,如果您想在浏览器中使用它,您可能还需要使用 typescript 或 babel 进行转译。

更新:

从节点 9 开始,异步生成器已暂存。您只需使用--harmony 即可启用它。

【讨论】:

  • 现在默认启用节点 10
【解决方案2】:

根本没有异步生成器函数。

然而。他们仍在弄清楚他们的语义是什么,请参阅async iteration proposal

【讨论】:

  • 这个答案不再相关,因为异步生成器在 ES6 中成为标准。
  • @gyo 这个答案 - 到目前为止 - 仍然是最新的,异步发电机仍处于上面链接的第 3 阶段草案中。 Promise 成为 ES6 的标准,async/await 成为 ES8 的标准。
  • 没错,它绝对不是“标准”,但所有最近的浏览器(除了 IE,Edge 支持有限)和最新版本的 Node(当前为 v10)都支持生成器
猜你喜欢
  • 2020-01-10
  • 1970-01-01
  • 2018-06-03
  • 2020-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 2020-12-27
相关资源
最近更新 更多