Tôi đang học Promise, để hiểu nó, tôi đã đọc một chút về vòng lặp Sự kiện của JavaScript. Điều này article giới thiệu ngắn gọn công việc của vòng lặp sự kiện chẳng hạn như ngăn xếp cuộc gọi, bảng sự kiện và hàng đợi tin nhắn.Hiểu thứ tự thực hiện của các trình xử lý sau đó() của lời hứa đã giải quyết
Nhưng tôi không biết cách ngăn xếp cuộc gọi đối phó với dòng chứa 'trả lại' và điều gì xảy ra sau đó. Dưới đây là một ví dụ mà tôi đã viết để hy vọng hiểu cách Promise hoạt động dựa trên vòng lặp sự kiện. Ngoài ra, hãy xem http://jsbin.com/puqogulani/edit?js,console nếu bạn muốn sử dụng.
var p1 = new Promise(
function(resolve, reject){
resolve(0);
});
p1.then(function(val){
console.log(val);
p1.then(function(){
console.log("1.1.1");
p1.then(function(){
console.log("1.1.2");
p1.then(function(){
console.log("1.1.3");
});
});
});
p1.then(function(){
console.log("1.2");
})
return 30;
//return new Promise(function(resolve, reject){
// resolve(30);
//});
})
.then(function(val){
console.log(val/2);
});
p1.then(function(){
console.log("2.1");
});
console.log("Start");
Như có thể thấy, có hai "trả lại", mỗi người dùng sẽ cung cấp thứ tự đầu ra khác nhau. Cụ thể, khi sử dụng return 30;
, 1.1.2, 1.1.3
là sau 15
, nhưng khi sử dụng return new Promise(...)
, 1.1.2, 1.1.3
trước 15
. Vì vậy, chính xác những gì đã xảy ra khi mã đạt hai 'trở lại' khác nhau?
Removed callbacks của 1.1.4 và 1.1.5 - chúng không được nhắc đến và làm cho nó không dễ hiểu hơn và mọi người đều có điểm lên đến 1.1.2 rồi. Mọi người sẽ vẫn có thể hiểu được tiến thoái lưỡng nan mà không có họ. –
@ try-catch-finally, Cảm ơn bạn đã đề xuất và chỉnh sửa. Tôi chỉ muốn làm cho nó rõ ràng hơn, mặc dù đôi khi nó làm cho đối diện :) –
Vì vậy, @ try-catch-cuối cùng, tôi tự hỏi nếu bạn có thể đưa ra lời khuyên về câu hỏi của tôi? Cảm ơn bạn –