ホームページ > ウェブフロントエンド > jsチュートリアル > トップレベルの Async/Await が JavaScript で機能しないのはなぜですか?それを修正するにはどうすればよいですか?

トップレベルの Async/Await が JavaScript で機能しないのはなぜですか?それを修正するにはどうすればよいですか?

DDD
リリース: 2024-12-07 10:05:17
オリジナル
745 人が閲覧しました

Why Doesn't Top-Level Async/Await Work in JavaScript and How Can I Fix It?

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

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