Rumah >hujung hadapan web >tutorial js >Adakah Fungsi Pelaksana Promise Constructor Segerak atau Asynchronous?

Adakah Fungsi Pelaksana Promise Constructor Segerak atau Asynchronous?

Patricia Arquette
Patricia Arquetteasal
2024-10-30 12:06:26518semak imbas

 Is the Promise Constructor’s Executor Function Synchronous or Asynchronous?

Panggil Balik Pembina Janji Perlaksanaan Asynchronous

Pembina Promise menerima fungsi pelaksana yang mentakrifkan logik pemenuhan janji. Satu persoalan utama timbul: adakah fungsi pelaksana ini dilaksanakan secara tak segerak atau serentak?

Jawapan Terperinci

Tingkah laku bergantung pada pelaksanaan Janji itu sendiri. Walau bagaimanapun, piawaian ES6 untuk Janji secara eksplisit menyatakan bahawa pemenuhan janji adalah sentiasa tak segerak.

Merujuk kepada spesifikasi, kami mendapati bahawa pelaksana berfungsi (dalam kes kami, fungsi y ) sememangnya dilaksanakan secara serentak (lihat langkah 10 spesifikasi). Walau bagaimanapun, panggilan seterusnya ke .then() pada promise, seperti promise.then(...), sentiasa dilaksanakan secara tak segerak (lihat langkah 8 algoritma "PerformPromiseThen").

Implikasi

Sifat tak segerak bagi panggilan .then() ini mempunyai beberapa implikasi:

  • Jika fungsi pelaksana mengubah suai mana-mana pembolehubah atau melakukan sebarang kesan sampingan, perubahan tersebut mungkin tidak dapat dilihat dengan serta-merta kepada .then( ) pengendali.
  • .then() pengendali boleh digunakan untuk menjadualkan tugasan yang harus dilaksanakan selepas gelung acara semasa selesai.
  • Tingkah laku tak segerak ini memastikan janji boleh digunakan untuk merantai berbilang tak segerak operasi dan kendalikan keputusannya secara berurutan.

Kod Contoh

Pertimbangkan coretan kod berikut:

<code class="javascript">function y(resolve, reject) {
  console.log("Result");
  resolve();
}

var promise = new Promise(y);
promise.then(() => {
  console.log("Then handler executed after the synchronous execution of y");
});</code>

Dalam contoh ini, fungsi y dilaksanakan secara serentak. Walau bagaimanapun, pengendali .then() dilaksanakan secara tak segerak setelah gelung acara selesai. Output kod ini ialah:

Result
Then handler executed after the synchronous execution of y

Atas ialah kandungan terperinci Adakah Fungsi Pelaksana Promise Constructor Segerak atau Asynchronous?. 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