MDNは言う :
await
キーワードはasync
関数内でのみ有効であることを忘れないでください。async
関数の本体の外部で使用すると、SyntaxError
を取得します。
しかし、それは真実ではありません。
DevToolsコンソールで次のコードを試してください。エラーは発生せず、結果は次のとおりです。
async function a(val) { return val; }
await a(10) // await is not inside async function
10
コードまたはドキュメントの何が問題になっていますか?
MDNドキュメントは正しいものであり、JavaScriptでどのように機能するかを説明しています。
これは、非同期/待機コードのテストを容易にするために、DevToolsによって追加された機能です。そして、それはJavaScriptの機能ではありません。
2017年8月11日以降、DevToolsでサポートされているようです:
https://chromium.googlesource.com/chromium/src.git/+/e8111c396fef38da6654093433b4be93bed01dce
あなたがスパイした場合
129行目に、非同期としてマークされた式を評価する機能があります。
async evaluateCommandInConsole
何も間違っていません。
DevToolsコンソールの特別な機能 !が見つかりました。 できるだけ簡単にするため ライブ環境でasync
-_await
コードを試すことができます。コンソールに入力したコードは、async
関数で自動的にラップされると想像できます。実際、別の答えが指摘したように、これはまさに起こることです。
これはコンソールで機能しますが、JavaScriptの機能ではないことに注意することが重要です。
だから、あなたの観察はすべて正しいと期待されています! await
関数の外部でasync
を使用するページにスクリプトをロードしようとするとエラーになるため、MDNドキュメントは正確です。一方、DevToolsコンソールはこの作業を行うように設計されているため(開発者の人間工学的目的のみ)、コンソールでエラーが発生することなくコードが実行されます。
これだけではありません DevToolsコンソールのスリーブをトリックする 。一般的に、reallyページでコードの実行方法をテストする場合は、コンソールではなくページで実際にスクリプトを実行するのが最善です。