Tôi đang cố gắng để chuỗi hứa hẹn để chuỗi sẽ phá vỡ nếu một lời hứa bị từ chối. Tôi theo sau sự dẫn dắt của một số previous SO question và cố gắng áp dụng nó cho những lời hứa gốc, nhưng tôi nghĩ rằng tôi hiểu lầm cách mọi thứ hoạt động.Phá vỡ chuỗi lời hứa javascript một cách rõ ràng
Dưới đây là cách tôi đã viết lại đoạn code:
Promise.resolve()
.then(function() {
return step(1)
.then(null, function() {
stepError(1);
});
})
.then(function() {
return step(2)
.then(null, function() {
stepError(2);
});
})
.then(function() {
return step(3)
.then(null, function() {
stepError(3);
});
});
function step(n) {
console.log('Step '+n);
return (n === 2) ? Promise.reject(n) : Promise.resolve(n);
}
function stepError(n) {
console.log('Error '+n);
return Promise.reject(n);
}
Sản lượng của các mã trên là:
Step 1
Step 2
Error 2
Step 3
[UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): 2]
Trong hiểu biết của tôi, bước 2 nên phá vỡ các chuỗi và bước 3 không nên được thực thi. Khi bước (2) trả về một lời hứa bị từ chối, bướcError (2) được thực hiện như mong đợi. Nhưng vì nó trả về Promise.reject (2), chức năng trong kế tiếp không nên được thực hiện, và vì không bắt kịp, lời hứa từ chối bước 2 dường như - như mong đợi - được chuyển tiếp cho đến khi nó thoát khỏi bởi vì nó không tìm thấy bất kỳ trình xử lý nào.
Tôi thiếu gì ở đây?
Đây là một JSFiddle để chơi với: https://jsfiddle.net/6p4t9xyk/