using await on global scope without async keyword

2020-03-13 04:12发布

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

5条回答
成全新的幸福
2楼-- · 2020-03-13 04:27

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.

Top level await in console

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

查看更多
趁早两清
3楼-- · 2020-03-13 04:31

await can only be used within a function that is labeled async, so there are two ways you can approach this.

Note: There is a proposal in place that may eventually allow the usage of Top level await calls.

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)
})

查看更多
虎瘦雄心在
4楼-- · 2020-03-13 04:32

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.

查看更多
Evening l夕情丶
5楼-- · 2020-03-13 04:43

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

查看更多
淡お忘
6楼-- · 2020-03-13 04:43

You could wrap all the code in the global scope in an async function.

For example:

// ...global imports...

new Promise (async () => {

  // ...all code in the global scope...

}).then()
查看更多
登录 后发表回答