Rumah > Soal Jawab > teks badan
P粉7703754502023-08-17 16:48:21
Selain jawapan Nicholas, anda mungkin terperangkap dengan penggunaan berulang 'res' pengecam. Penggunaan pertama Promise secara dalaman adalah sebagai fungsi panggil balik, yang mengembalikan nilai 2 kepada Promise. Penggunaan kedua dalam baris terakhir berada dalam skop yang berbeza dan digunakan sebagai nama parameter untuk kaedah .then() Promise luar. Ia mungkin membantu jika anda menggantikan 'res' dalam baris terakhir dengan 'outerPromiseResult', untuk menjelaskan perkara.
P粉4935341052023-08-17 15:42:59
Ringkasnya, ia adalah kerana susunan yang anda panggil .then
.
new Promise((resolve) => { new Promise((res) => { console.log("c"); resolve(3); res(2);
Dalam kod di atas, kami memasukkan pembina luar, yang segera memanggil fungsi luar. Kemudian buat Janji dalaman dan panggil fungsi dalaman. Fungsi dalaman merekodkan "c", kemudian menyelesaikan Janji luar kepada 3, kemudian menyelesaikan Janji dalaman kepada 2.
Jadi pada ketika ini kami mempunyai 2 Janji yang diselesaikan, tetapi tiada kod cuba menggunakannya.
}).then((response) => console.log(response))
Setelah selesai membina Janji batin, kami memanggil .then
pada Janji batin. Memandangkan Janji telah diselesaikan, ini membuat baris gilir microtask untuk dijalankan.
}).then((res) => console.log(res));
Selepas selesai membina Janji luaran, kami memanggil .then
pada Janji luaran. Memandangkan Janji telah diselesaikan, ini membuat baris gilir microtask untuk dijalankan.
Sekarang kami telah selesai menjalankan semua kod segerak. Timbunan panggilan kosong dan microtask mula berjalan. Ini dilaksanakan dalam urutan masuk dahulu, keluar dahulu, jadi tugas mikro yang berkaitan dengan Janji dalaman dijalankan dahulu, rekod 2. Kemudian jalankan microtasks yang tinggal dan rekod 3.