Rumah >hujung hadapan web >tutorial js >Mengapa Async/Menunggu Tahap Atas Tidak Berfungsi dalam JavaScript dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Async/Menunggu Tahap Atas Tidak Berfungsi dalam JavaScript dan Bagaimana Saya Boleh Membetulkannya?

DDD
DDDasal
2024-12-07 10:05:17796semak imbas

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

Menggunakan async/menunggu di Peringkat Atas

Soalan:

Mengapa perkara berikut kod tidak bekerja?

async function main() {  
    var value = await Promise.resolve('Hey there');
    console.log('inside: ' + value);
    return value;
}

var text = main();  
console.log('outside: ' + text);

Jawapan:

Punca kod tidak berfungsi adalah kerana main mengembalikan janji. Semua fungsi async mengembalikan janji.

Untuk menggunakan async/menunggu di peringkat atas, terdapat tiga pilihan:

1. Menunggu Tahap Atas dalam Modul:

Dalam ES2022, menunggu peringkat teratas boleh digunakan dalam modul. Ini membolehkan anda menggunakan sintaks await di bahagian atas modul. Walau bagaimanapun, modul tidak akan selesai memuatkan sehingga janji yang anda tunggu selesai. Jika janji ditolak, modul akan gagal dimuatkan.

const text = await main();
console.log(text);

2. Fungsi async Peringkat Atas Yang Tidak Pernah Menolak:

Gunakan fungsi async peringkat atas yang tidak pernah menolak (melainkan anda mahu ralat "penolakan tidak dikendalikan"):

(async () => {
    try {
        const text = await main();
        console.log(text);
    } catch (e) {
        // Handle errors
    }
})();

3. kemudian dan tangkap:

Gunakan .then() dan .catch() untuk mengendalikan janji yang dikembalikan oleh utama:

main()
    .then(text => {
        console.log(text);
    })
    .catch(err => {
        // Handle errors
    });

Perhatikan bahawa ketiga-tiga pilihan memerlukan pengendalian penolakan janji atau pengecualian async, kerana tiada pemanggil untuk menyampaikannya.

Atas ialah kandungan terperinci Mengapa Async/Menunggu Tahap Atas Tidak Berfungsi dalam JavaScript dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn