Memahami Perintah Pelaksanaan Janji
Dalam JavaScript, janji digunakan untuk mengendalikan operasi tak segerak. Susunan pelaksanaan pengendali janji boleh mengelirukan, terutamanya apabila terdapat janji bersarang.
Analisis Baris demi Baris Kod
Mari kita analisis baris kod yang disediakan mengikut baris untuk memahami perintah pelaksanaan:
1. Promise.resolve('A')
.then(function(a){console.log(2, a); return 'B';})
.then(function(a){
Promise.resolve('C')
.then(function(a){console.log(7, a);})
.then(function(a){console.log(8, a);});
console.log(3, a);
return 'B';})
.then(function(a){
Promise.resolve('D')
.then(function(a){console.log(9, a);})
.then(function(a){console.log(10, a);});
console.log(4, a);})
.then(function(a){
console.log(5, a);});
-
Baris 1: Mencipta janji yang diselesaikan serta-merta pada 'A' dan melampirkan pengendali .then() padanya.
-
Baris 2: Konsol mencatatkan '2' apabila janji diselesaikan dengan 'A' dan mengembalikan 'B'.
-
Baris 5: Satu lagi Pengendali .then() ditambah pada janji yang dibuat dalam Baris 1.
-
Baris 6-8: Mencipta janji baharu yang diselesaikan pada 'C' dan melampirkan dua pengendali .then() log konsol '7' dan '8' itu masing-masing.
-
Baris 10: Konsol log '3' dan mengembalikan 'B'.
-
Baris 12- 14: Pengendali .then() lain ditambahkan pada janji yang dibuat dalam Baris 5.
-
Baris 15-17: Mencipta janji baharu yang diselesaikan pada 'D' dan dilampirkan dua pengendali .then() yang masing-masing log konsol '9' dan '10'.
-
Baris 19: Log konsol '4'.
-
Baris 22 -24: Pengendali .then() lain ditambahkan pada janji yang dibuat dalam Baris 12.
-
Baris 27: Konsol mencatatkan '5' apabila janji itu diselesaikan.
Perintah Pelaksanaan
-
Baris 1: Janji diselesaikan, log konsol "2 A"
-
Baris 10: Log konsol "3 B"
-
Baris 19: Log konsol "4 B"
-
Baris 27: Log konsol "5 undefined"
-
Baris 7: Log konsol "7 C"
-
Baris 8: Log konsol "8 undefined"
-
Baris 15: Log konsol "9 D"
-
Baris 17: Log konsol "10 undefined"
-
Baris 30: Log konsol "1"
-
Baris 33: Log konsol "6"
Perbincangan
- Pengendali janji dijadualkan secara tidak segerak, jadi mereka melaksanakan selepas urutan pelaksanaan semasa selesai.
- Janji bersarang mencipta rantai janji bebas yang tidak mempunyai perintah pelaksanaan yang telah ditetapkan.
- Tertib bagi pelaksanaan janji bergantung kepada pelaksanaan enjin janji. Dalam kes ini, enjin menggunakan jadual tugasan mikro (pengendali janji) sebelum tugasan makro (setTimeout()).
- Bergantung pada perintah pelaksanaan khusus untuk janji bersarang tidak disyorkan. Sebaliknya, rantaian berjanji secara jelas untuk mengawal perintah pelaksanaan mereka.
Atas ialah kandungan terperinci Apakah Perintah Pelaksanaan Pengendali Janji dalam JavaScript?. 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