Rumah >hujung hadapan web >tutorial js >Bilakah Pengendali JavaScript Promise .then() Melaksanakan Berkaitan Antara Satu Sama Lain?
Memahami Perintah Pelaksanaan dalam Janji JavaScript
Janji dalam JavaScript menawarkan model pengaturcaraan tak segerak di mana kod dilaksanakan sekali peristiwa atau janji tertentu , dipenuhi. Walau bagaimanapun, apabila berurusan dengan berbilang janji, adalah penting untuk memahami susunan pelaksanaan untuk mengelakkan tingkah laku yang tidak dapat diramalkan.
Pertimbangkan coretan kod berikut:
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 a;}) .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);}); console.log(1); setTimeout(function(){console.log(6)},0);
Setelah pelaksanaan, anda mungkin melihat perkara berikut susunan output:
1 2 "A" 3 "B" 7 "C" 4 "B" 8 undefined 9 "D" 5 undefined 10 undefined 6
Memahami Perintah Pelaksanaan
Pengesyoran
Untuk memastikan tertib pelaksanaan tertentu, elakkan daripada membuat rantaian janji yang tidak disegerakkan dan sebaliknya bergantung pada memautkan janji secara berurutan. Kembalikan janji daripada pengendali dalaman .then() untuk merantainya dengan janji induk, seperti yang ditunjukkan di bawah:
Promise.resolve('A').then(function (a) { console.log(2, a); return 'B'; }).then(function (a) { var p = Promise.resolve('C').then(function (a) { console.log(7, a); }).then(function (a) { console.log(8, a); }); console.log(3, a); return p; // Link the inner promise to the parent chain }).then(function (a) { var p = Promise.resolve('D').then(function (a) { console.log(9, a); }).then(function (a) { console.log(10, a); }); console.log(4, a); return p; // Link the inner promise to the parent chain }).then(function (a) { console.log(5, a); }); console.log(1); setTimeout(function () { console.log(6) }, 0);
Dengan pendekatan ini, perintah pelaksanaan menjadi deterministik sepenuhnya: 1, 2 "A", 3 " B", 7 "C", 8 undefined, 4 undefined, 9 "D", 10 undefined, 5 undefined dan 6.
Atas ialah kandungan terperinci Bilakah Pengendali JavaScript Promise .then() Melaksanakan Berkaitan Antara Satu Sama Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!