【问题标题】:Why await can't be used from a normal function or the global scope为什么不能从普通函数或全局范围使用 await
【发布时间】:2019-07-23 20:22:53
【问题描述】:

我正在阅读一个包含以下示例代码的博客,

async function fAsync() {
    // actual return value is Promise.resolve(5)
    return 5;
}

// can't call "await fAsync()". Need to use then/catch
fAsync().then(r => console.log(`result is ${r}`));

在博客中提到了这一点,

如果我们从普通函数或全局范围内调用异步函数,我们将无法使用 await,而是求助于原版 Promise:

我的困惑是为什么我们不能在那里使用 await?博文是https://nikgrozev.com/2017/10/01/async-await/

【问题讨论】:

  • 为了获得有效的异步等待语法和功能,还需要在异步函数中调用 await 关键字。如果你在异步函数中有整个代码块,你可以等待 fAsync() 的结果。 jsfiddle.net/gmsx42ny
  • await 仅适用于标记为 async 的函数,这就是为什么你不能在异步函数块之外使用它需要使用 then/catch
  • 阅读mdn documentation的第一行

标签: javascript


【解决方案1】:

“顶级等待”目前处于 TC39 的 ECMAScript 标准的第 2 阶段(草案)

https://github.com/tc39/proposal-top-level-await

第二阶段已经3年了,所以,我不知道它是否会进入第三阶段(候选),更不用说第四阶段(完成)


编辑

最初的答案是在 2018 年 11 月。2019 年 6 月 顶级等待毕业到第 3 阶段(候选人)。第 4 阶段很可能会随之而来,但很难说何时。

旁注:如果您想深入了解,this gist 和它的一些 cmets 可以提供有关该主题的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-29
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 2022-01-10
    • 1970-01-01
    相关资源
    最近更新 更多