【问题标题】:Why was await* removed from the async/await proposal?为什么从 async/await 提案中删除了 await*?
【发布时间】:2016-05-12 02:54:06
【问题描述】:

它似乎被记录在案的唯一地方是this issue threadthe actual specification。但是,删除的原因并没有在我能找到的任何地方发布。

新推荐的方式好像是await Promise.all(),但是我很好奇为什么await*被去掉了。

【问题讨论】:

  • 对于投票关闭的人来说,更改规范不是基于意见的。为什么要删除它有一个明确的答案。我不是在问 await* 与 Promise.all 的优点……只是为什么会发生。
  • 出现第一个链接是在“regenerator”库中引用await * 的实现?而不是 es7?规范链接参考await 部分 “11.6.2.2Future Reserved Words# 以下标记保留用作未来语言扩展中的关键字。” ?

标签: javascript async-await ecmascript-next


【解决方案1】:

好吧,自述文件before it was removed 的最新修订版已经提到了该段落中的所有内容:

await* 和并行性

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

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

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

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

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

最后,更强大的武器(平行性)的提议仍在进行中。查看async iterationasync generatorsobservables。可能有些人可以使用 await* 关键字比简单的承诺数组更好。

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

【讨论】:

    猜你喜欢
    • 2020-03-25
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 2015-04-26
    • 2021-10-09
    • 1970-01-01
    相关资源
    最近更新 更多