web-dev-qa-db-ja.com

asyncキーワードなしでグローバルスコープでawaitを使用する

私はnodejs REPLのグローバルスコープでこのようなことをやろうとしています私の理解によれば、次の両方のステートメントが有効です。 ドキュメントを参照

let x = await Promise.resolve(2);
let y = await 2;

ただし、これらのステートメントは両方ともエラーをスローしています。

誰かが理由を説明できますか?私のノードのバージョンはv8.9.4です

9
nmxl

awaitは、asyncというラベルの付いた関数内でのみ使用できるため、これに対処する方法は2つあります。

最初の方法は、次のような自己呼び出し関数を作成することです。

_(async function() {
  let x = await Promise.resolve(2)
  let y = await 2
  
  console.log(x, y)
})()_

または2番目の方法は.then()を使用することです

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

  console.log(x, y)
})_
6
Get Off My Lawn

それをしてはいけない。 MDN doc は言う

Awaitオペレーターは、Promiseを待機するために使用されます。 これは、非同期関数内でのみ使用できます。

5
unclexo

この提案は現在、TC39プロセスのステージ2にあります。 [〜#〜]リンク[〜#〜]

この機能はGoogle ChromeおよびMozilla Firefoxで現在使用できます。コンソールで非同期せずに最上位の待機を使用できます。

Top level await in console

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

2
Ankit Sinha

ノード10以降、-experimental-repl-awaitを使用してノードプロセスを実行し、レベル待ちを許可できます https://nodejs.org/api/repl.html#repl_await_keyword

1