为什么从异步/等待提案中删除了 await*

Why was await* removed from the async/await proposal?

本文关键字:删除 await 异步 等待 为什么      更新时间:2023-09-26

似乎唯一记录的地方是这个问题线程和实际规范。但是,删除的原因没有发布在我能找到的任何地方。

新推荐的方式似乎await Promise.all(),但我很好奇为什么await*被删除。

好吧,自述文件被删除之前的最后一个修订版已经提到了该段落中的所有内容:

等待* 和并行性

在发电机中,可以使用yieldyield*。异步 函数,只允许awaityield*的直接类似物 在异步函数中没有意义,因为它需要 反复等待内部操作,却不知道该值什么 传入每个等待(对于yield*,它只是传入未定义的 因为迭代器不接受传入值(。

有人建议该语法可以重用于不同的 语义 - Promise.all糖 .这将接受一个值 一个 Promise 数组,并且会(异步(返回一个数组 承诺返回的值。预计这将是 最常见的与 Promise 相关的操作,但还没有语法 在此提案的核心之后的糖是可用的。

因此,它不像人们所期望的那样直接类似于yield*,它并没有真正的意义,它只是一个建议,但从未真正包含在规范提案中。

共识是,没有理由引入不必要的语法糖,调用Promise.all没有太大区别。

您可以查看问题 8 或问题 29 中的讨论。

最后,关于更强大武器(平行(的提议仍在进行中。查看异步迭代、异步生成器和可观察量。可能有一些可以使用 await* 关键字比简单的 promise 数组好得多。

async/await 提案是最小的,只引入了必要的原语。没有关于可能的扩展的自行车棚,这应该单独讨论。