9

The only place it seems to be documented is this issue thread and the actual specification. However, the reasoning for the removal isn't posted anywhere I could find.

The new recommended way seems to be await Promise.all(), but I'm curious as to why await* was removed.

4

1 回答 1

15

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

await* 和并行性

在生成器中,两者yieldyield*可以使用。在异步函数中,onlyawait是允许的。的直接类比yield* 在异步函数中没有意义,因为它需要重复等待内部操作,但不知道每个等待传递什么值(因为yield*,它只是传递 undefined 因为迭代器不接受传入的值)。

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

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

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

您可以查看issue 8issue 29中的讨论。

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

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

于 2016-02-03T04:17:18.117 回答