ホームページ > ウェブフロントエンド > jsチュートリアル > Async 関数がトップレベルの `async` コードになる前に `console.log` が表示されるのはなぜですか?

Async 関数がトップレベルの `async` コードになる前に `console.log` が表示されるのはなぜですか?

Susan Sarandon
リリース: 2024-12-17 18:45:18
オリジナル
646 人が閲覧しました

Why Does `console.log` Appear Before Async Function Results in Top-Level `async` Code?

トップレベルの非同期関数でログ メッセージの後に非同期実行が発生するのはなぜですか?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート