トップレベルでの async/await の使用
質問:
次の理由は次のとおりです。コードではありません
async function main() { var value = await Promise.resolve('Hey there'); console.log('inside: ' + value); return value; } var text = main(); console.log('outside: ' + text);
答え:
コードが機能しない理由は、main が Promise を返すためです。すべての非同期関数は Promise を返します。
トップレベルで async/await を使用するには、次の 3 つのオプションがあります:
1。モジュール内のトップレベルの await:
ES2022 では、モジュール内でトップレベルの await を使用できます。これにより、モジュールの先頭で await 構文を使用できるようになります。ただし、モジュールは、待機している約束が解決されるまでロードを完了しません。 Promise が拒否された場合、モジュールはロードに失敗します。
const text = await main(); console.log(text);
2.決して拒否しないトップレベルの非同期関数:
決して拒否しないトップレベルの非同期関数を使用します (「未処理の拒否」エラーが必要な場合を除く):
(async () => { try { const text = await main(); console.log(text); } catch (e) { // Handle errors } })();
3. then と catch:
.then() と .catch() を使用して、main によって返された Promise を処理します:
main() .then(text => { console.log(text); }) .catch(err => { // Handle errors });
3 つのオプションすべてで Promise の拒否を処理する必要があることに注意してください。非同期例外を渡す呼び出し元がないため。
以上がトップレベルの Async/Await が JavaScript で機能しないのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。