我正在尝试在nodejs REPL中的全局范围上执行类似的操作。根据我的理解,以下两个陈述均有效。 see docs
let x = await Promise.resolve(2);
let y = await 2;
但是,这两个语句都抛出错误。
有人可以解释为什么吗? 我的节点版本是v8.9.4
答案 0 :(得分:4)
您不能这样做。 MDN doc说
await运算符用于等待Promise。 只能使用 在异步函数中。
答案 1 :(得分:3)
await
只能在标有async
的函数中使用,因此有两种方法可以实现。
第一种方法是创建一个像这样的自调用函数:
(async function() {
let x = await Promise.resolve(2)
let y = await 2
console.log(x, y)
})()
或者第二种方法是使用.then()
Promise.resolve(2).then(async data => {
let x = data
let y = await 2
console.log(x, y)
})
答案 2 :(得分:1)
自节点10起,您可以使用--experimental-repl-await运行节点进程以允许进行级别等待 https://nodejs.org/api/repl.html#repl_await_keyword
答案 3 :(得分:0)
该提案目前处于TC39流程的第二阶段。 LINK
到目前为止,您可以在Google Chrome和Mozilla Firefox中使用此功能。您可以在控制台中使用顶级等待而无需异步。
答案 4 :(得分:-1)
您可以在异步函数中包装全局范围内的所有代码。
例如:
// ...global imports...
new Promise (async () => {
// ...all code in the global scope...
}).then()