async/await では、非同期関数が Promise を返すことが想定されています。ただし、明示的な Promise 処理を行わずに非同期関数をトップレベルで使用すると、複雑さが生じます。
ここでの問題は、main 関数が Promise を返すことです。となり、console.log('outside: ' text) ステートメントはすぐに出力する値がないまま放置されます。 async/await 構文では、main() によって返された Promise が解決するのを待ってから続行するため、「inside」メッセージが「outside」メッセージの後に記録されます。
明示的な then() 処理を行わずに戻り値を利用するには、次の 3 つのオプションがあります:
1。モジュールのトップレベル Await
(ES2022 サポートのある最新の環境で利用可能)
const text = await main(); console.log(text);
2.決して拒否しないトップレベルの非同期関数
(async () => { try { const text = await main(); console.log(text); } catch (e) { // Handle Promise rejection or async exceptions here } })();
3.それから
main() .then(text => { console.log(text); }) .catch(err => { // Handle Promise rejection or async exceptions here });
以上がAsync 関数がトップレベルの `async` コードになる前に `console.log` が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。