Rumah  >  Artikel  >  hujung hadapan web  >  Adakah Panggilan Balik Promise Constructor Dilaksanakan Secara Seiring atau Asynchronously?

Adakah Panggilan Balik Promise Constructor Dilaksanakan Secara Seiring atau Asynchronously?

Linda Hamilton
Linda Hamiltonasal
2024-10-30 17:26:26696semak imbas

Is the Promise Constructor Callback Executed Synchronously or Asynchronously?

Pelaksanaan Asynchronous of Promise Constructor Callback

Soalan:

Dalam coretan kod berikut:

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

var promise = new Promise(y);</code>

Adakah fungsi y akan dilaksanakan secara tak segerak atau serentak?

Jawapan:

Pelaksanaan panggilan balik promise constructor bergantung pada pelaksanaan khusus daripada spesifikasi Promises/A.

Spesifikasi ES6, dalam Bahagian 25.4.3.1, menyatakan bahawa:

"Jika pelaksana tidak membuang pengecualian, objek Promise mesti dibina dalam dua langkah:"

  1. Fungsi pelaksana mesti dipanggil dengan tiga argumen:

    • resolve(): Fungsi yang boleh dipanggil pelaksana untuk menunaikan janji.
    • reject(): Fungsi yang boleh dipanggil pelaksana untuk menolak janji.
    • ini: Dikhaskan untuk kegunaan masa hadapan.
  2. Fungsi pelaksana mesti kembali serentak.

Walau bagaimanapun, pelaksanaan seterusnya .then() memanggil janji sentiasa tak segerak. Ini jelas dalam Bahagian 25.4.5.3.1 spesifikasi ES6, yang menerangkan algoritma "PerformPromiseThen":

"Jika nilai slot dalaman janji [[PromiseState]] "dipenuhi", ... "
"...Lakukan EnqueueJob("PromiseJobs", PromiseReactionJob, «fulfillReaction, value»)."

Begitu juga, jika janji itu ditolak, algoritma melakukan enqueue kerja tak segerak.

Kesimpulan:

Oleh itu, fungsi yang dihantar kepada pembina janji dilaksanakan secara serentak, manakala panggilan .then() seterusnya sentiasa dilaksanakan secara tak segerak mengikut spesifikasi ES6.

Atas ialah kandungan terperinci Adakah Panggilan Balik Promise Constructor Dilaksanakan Secara Seiring atau Asynchronously?. 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