Adakah Panggilan Balik Promise Constructor Dilaksanakan Secara Seiring atau Asynchronously?

Linda Hamilton
Lepaskan: 2024-10-30 17:26:26
asal
691 orang telah melayarinya

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!