在没有async关键字的情况下在全局范围内使用await

nmx*_*mxl 6 javascript node.js ecmascript-6 es6-promise

我正在尝试在nodejs REPL的全局范围内执行类似的操作。根据我的理解,以下两个陈述均有效。查看文件

let x = await Promise.resolve(2);
let y = await 2;
Run Code Online (Sandbox Code Playgroud)

但是,这两个语句都引发错误。

有人可以解释为什么吗?我的节点版本是v8.9.4

Get*_*awn 6

await只能在标记为的函数中使用async,因此有两种方法可以实现。

第一种方法是创建一个如下所示的自调用函数:

(async function() {
  let x = await Promise.resolve(2)
  let y = await 2
  
  console.log(x, y)
})()
Run Code Online (Sandbox Code Playgroud)

或第二种方法是使用 .then()

Promise.resolve(2).then(async data => {
  let x = data
  let y = await 2

  console.log(x, y)
})
Run Code Online (Sandbox Code Playgroud)

  • 好吧,IMO 好的答案不会重复错误的代码,他们会更正并解释原因。 (4认同)

Ank*_*nha 6

该提案目前处于 TC39 流程的第 3 阶段。关联

您现在可以在 Google Chrome 和 Mozilla Firefox 中使用此功能。您可以在控制台中使用没有 async 的顶级 await。

控制台中的顶级等待

https://twitter.com/addyosmani/status/1080365576218759168


unc*_*exo 5

你不能这样做。MDN文件

等待操作符用于等待Promise。它只能在异步函数中使用。