Móc xích các Promises trong Javascript (phần 2)

Móc xích các Promises trong Javascript (tiếp tục)

Các promises cũng có thể được nested bên trong phương thức then() để tạo các hàm được phân giải hay bị
bác bỏ tại mỗi liên kết trong móc xích. Code sau đặt một object promise bên trong phương thức then() đầu
tiên. Promise planDinner được khởi tạo và nếu nó được giải quyết thành công, promise thứ hai được tạo
cái phân giải sau một hoãn 1 giây hoặc như “Made dinner” (70% thời gian) hoặc như “Ordered takeout
anyway” (30% thời gian). Một phân giải thành công của promise đó được trả về tới phương thức then()
tiếp theo, cái ghi lại nó trong console. Thông điệp từ một promise bị bác bỏ vẫn được bắt sử dụng phương
thức catch().

console.log(“Planning dinner”);
buyGroceries

.then(msg => {

console.log(msg);
return new Promise( (resolve, reject) => {

setTimeout( () => {

if (Math.random() < 0.7) {

resolve(“Made dinner”);

} else {

reject(“Ordered takeout anyway”);

}

}, 1000);

});

})
.then(newMsg => console.log(newMsg))
.catch(msg => console.log(msg));

Khi code này được chạy, 3 chuỗi thông điệp có thể sẽ được ghi lại.

Planning dinner > Ordered takeout
Planning dinner > Bought groceries > Ordered takeout anyway
Planning dinner > Bought groceries > Made dinner

Log thông tin người dùng các promises gì được giữ và nếu chúng đã không được giữ, tại điểm gì promise chain
bị phá vỡ. Nói chung, bạn nên tránh nesting các promises nếu không bạn gặp nguy cơ tạo trùng ngoại lệ callback
hell với các promises.

Chia sẻ