ホームページ > ウェブフロントエンド > jsチュートリアル > トップレベルの「async/await」が期待どおりに動作しないのはなぜですか?

トップレベルの「async/await」が期待どおりに動作しないのはなぜですか?

DDD
リリース: 2025-01-03 12:42:38
オリジナル
457 人が閲覧しました

Why Doesn't Top-Level `async/await` Behave as Expected?

トップレベルの非同期実行: async/await の使用法を理解する

async/await が非同期タスクの同期実行を容易にするという誤解がありますが、上部で使用しようとする場合は微妙な考慮事項がありますlevel.

提供された例が期待どおりに動作しない主な理由は、非同期関数が常に Promise を返すためです。 main() が実行されると、async 関数内の結果ではなく、Promise が返されます。これにより、関数の外側のコンソール出力が内部のメッセージの前に出力されるという一連のイベントが発生し、なぜ内部のタスクが非同期で実行されるように見えるのか疑問に感じます。

トップレベルの非同期/待機のオプション:

これに対処するには、いくつかのアプローチがあります。採用:

1.モジュール内のトップレベルの Await:

ES2022 標準および最新のブラウザーでサポートされているこの機能を使用すると、モジュール内で await を直接使用できます。トップレベルの await を使用すると、待機している Promise が解決されるまでモジュールの読み込みが一時停止されます。 Promise が拒否された場合、モジュールのロードは失敗します。

2.決して拒否しないトップレベルの非同期関数:

もう 1 つのオプションは、決して拒否しないトップレベルの非同期関数を定義することです (「未処理の拒否」エラーを処理する場合を除く)。この関数は main() への呼び出しをラップし、内部で発生する可能性のあるエラーを処理できます。

3. then と catch:

main() によって返された Promise で then メソッドと catch メソッドを使用して、それぞれ結果と潜在的なエラーを処理できます。これらのアプローチを使用すると、Promise が解決されたときに実行されるコールバックを登録でき、main() の値を必要に応じてログに記録したり処理したりできるようになります。

結論:

トップレベルで async/await を使用するには、予期される動作について慎重に検討し、理解する必要があります。上記で概説した手法を利用することで、async/await を効果的に使用して非同期実行を実現しながら、エラーを適切に処理し、非同期タスクから結果を取得することができます。

以上がトップレベルの「async/await」が期待どおりに動作しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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