I am trying to do something like this on global scope in nodejs REPL. As per my understanding both the following statements are valid. see docs
let x = await Promise.resolve(2);
let y = await 2;
However, both these statements are throwing an error.
Can somebody explain why? my node version is v8.9.4
await
can only be used within a function that is labeled async
, so there are two ways you can approach this.
The first way is to create a self invoked function like this:
(async function() {
let x = await Promise.resolve(2)
let y = await 2
console.log(x, y)
})()
Or the second way is to use .then()
Promise.resolve(2).then(async data => {
let x = data
let y = await 2
console.log(x, y)
})
You can not do that. MDN doc says
The await operator is used to wait for a Promise. It can only be used inside an async function.
This proposal is currently in stage 2 of the TC39 process. LINK
You can use this feature in Google Chrome and Mozilla Firefox as of now. You can use top level await without async in console.
since node 10, you can run node process with --experimental-repl-await to allow to level await https://nodejs.org/api/repl.html#repl_await_keyword
来源:https://stackoverflow.com/questions/51525234/using-await-on-global-scope-without-async-keyword