トップレベルの非同期実行: 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 サイトの他の関連記事を参照してください。