【发布时间】:2021-07-10 04:53:18
【问题描述】:
我知道asynchronous iteration 是什么。但是自从 MDN 和 node.js 10 在 2018 年推出它以来,我还没有看到它的实际用途,例如它会更好地解决什么样的问题? A common example我看到是把回调fs.createReadStream改写成for await (const chunk of stream)
Another example我能想到的就是按顺序发送分页请求。
但这两个例子不足以说服我使用for-await-of。我只是想不出我有一系列承诺需要一个一个解决它们的场景。
那么有人可以举一些使用异步迭代比不使用它更好地解决问题的实际例子吗?
【问题讨论】:
-
我知道你的意思,就像回调地狱一样,异步事物依赖于另一个异步事物的结果。但我的问题是我想不出一个场景,我可以事先得到所有的承诺,然后一个一个地等待它们。
-
@danh 检查我在这里得到的答案github.com/tc39/proposal-async-iteration/issues/135
-
"我有一个 promises 数组的场景" - 当你已经拥有一个数组中的所有 promises(固定数量)时为时已晚;在这种情况下,you should not use
for await … of。异步迭代仅在promise 一个接一个创建的情况下才有用,例如当它取决于前一项的结果时,它允许您开始处理第一个而不看到结束。 -
"这些例子不足以说服我使用
for-await-of。" - 你能告诉我们如何为没有for await … of的人编写代码吗?也许这样更容易解释差异。但是,是的,它主要只是语法糖,您可以通过使用await getNext()手动迭代结构来编写任何这样的循环 - 就像for … of只是语法糖一样,就像每个for循环都可以重写为while. -
@Qiulang 因为承诺不是从外部解决的,所以它们不会“在您等待它们时开始解决” - 您执行的任务在您创建承诺时开始,承诺只代表结果。所以“一一解决”是没有意义的。您只能“逐一创建它们”。
标签: javascript node.js async-await es6-promise