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!