为什么不能从普通函数或全局范围使用 await

use*_*567 1 javascript

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

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}`));
Run Code Online (Sandbox Code Playgroud)

在博客中提到,

如果我们从普通函数或全局范围调用异步函数,我们将无法使用 await 并求助于 vanilla promises:

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

Pam*_*cel 5

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

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

它已经在第 2 阶段进行了 3 年,所以,我不知道它是否会进入第 3 阶段(候选人)更不用说第 4 阶段(已完成)


编辑

原答案是在 2018 年 11 月。 2019 年 6 月top level await 毕业到 stage 3 (candidate)。第 4 阶段很可能会出现,但很难说何时。

旁注:如果你想更深入地研究,这个要点和它的一些评论是关于这个主题的信息。