为什么等待*从异步/等待提议中删除?

m0m*_*eni 7 javascript async-await ecmascript-next

它似乎唯一记录的地方是这个问题线程实际规范.但是,删除的原因并没有张贴在我能找到的任何地方.

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

Ber*_*rgi 14

那么,删除它之前的自述文件的最后一次修订已经提到了该段落中的所有内容:

等待*和并行

在发电机,既yieldyield*可以使用.在异步功能中,仅await允许.直接类比yield* 在异步函数中没有意义,因为它需要重复等待内部操作,但不知道传递给每个等待的值是什么(yield*因为迭代器不接受传入值,它只是传递未定义).

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

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

一致认为,没有理由引入比必要的更多的语法糖,呼叫Promise.all并没有多大区别.

您可以查看第8期第29 的讨论.

最后,关于更强大的武器(并行性)的提议仍在进行中.查看异步迭代,异步生成器可观察对象.可能有一些可能await*比使用简单的承诺数组更好地使用关键字.

async/ await建议是最少的,只有引入了必要的图元.关于可能的扩展没有自行决定,应该单独讨论.