Rumah >hujung hadapan web >tutorial js >Mengapakah `console.log` Muncul Sebelum Hasil Fungsi Async dalam Kod `async` Peringkat Atas?

Mengapakah `console.log` Muncul Sebelum Hasil Fungsi Async dalam Kod `async` Peringkat Atas?

Susan Sarandon
Susan Sarandonasal
2024-12-17 18:45:18743semak imbas

Why Does `console.log` Appear Before Async Function Results in Top-Level `async` Code?

Mengapa Perlaksanaan Asynchronous Berlaku Selepas Mesej Log dalam Fungsi Async Peringkat Atas?

Dalam async/wait, diandaikan bahawa fungsi async akan mengembalikan janji. Walau bagaimanapun, apabila fungsi async digunakan pada peringkat teratas tanpa pengendalian Promise yang jelas, kerumitan timbul.

Memahami Mengapa Ia Tidak Berfungsi

Isu di sini ialah fungsi utama mengembalikan Promise , meninggalkan pernyataan console.log('outside: ' text) terkandas tanpa nilai untuk dikeluarkan serta-merta. Sintaks async/wait menyebabkan mesej 'dalam' dilog selepas mesej 'luar' kerana ia menunggu Janji yang dikembalikan oleh main() untuk diselesaikan sebelum meneruskan.

Menyelesaikan Masalah

Untuk menggunakan nilai yang dikembalikan tanpa pengendalian then() yang eksplisit, anda mempunyai tiga pilihan:

1. Menunggu Tahap Atas dalam Modul

(Tersedia dalam persekitaran moden dengan sokongan ES2022)

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

2. Fungsi Async Peringkat Atas Yang Tidak Pernah Menolak

(async () => {
try {
const text = await main();
console.log(text);
} catch (e) {
// Handle Promise rejection or async exceptions here
}
})();

3. kemudian dan tangkap

main()
.then(text => {
console.log(text);
})
.catch(err => {
// Handle Promise rejection or async exceptions here
});

Atas ialah kandungan terperinci Mengapakah `console.log` Muncul Sebelum Hasil Fungsi Async dalam Kod `async` Peringkat Atas?. 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