Định nghĩa một object Promise trong Javascript
Một object Promise được định nghĩa sử dụng object constructor new Promise() sau:
let promise = new Promise((resolve, reject) => {
// statements defining the promise
resolve(resolve value);
reject(rejected value);
});
nơi resolve và reject là các callbacks cái được chạy một khi promise hoặc là được phân giải hoặc bị bác
bỏ. Không có cái gì xảy ra cho đến khi promise được giải quyết. Chú ý rằng object construtor này sử dụng
cú pháp hàm arrow nhưng bạn cũng có thể sử dụng một khai báo hàm. Khối lệnh được chứa bên trong promise được
gọi là executor. Các phát biểu của executor được chạy trên nền một khi promise được khởi tạo. Một khi promise
được giải quyết, một giá trị được gửi tới các hàm resolve và reject.
Code sau định nghĩa một promise kéo theo chuẩn bị dinner. Sau một trì hoãn 2 giây, executor trả về một số tuỳ
biến giữa 0 và 1 để rằng 80% thời gian promise sẽ được phân giải với mua groceries và 20% thời gian cái tuỳ chọn
bị bác bỏ. Nhưng phân giải của promise sẽ không được biết cho đến khi sau 2 giây trôi qua.
let planDinner = new Promise( (resolve, reject) => {
setTimeout( ()=>
if (Math.random() < 0.8)
resolve(“Bought groceries”)
} else {
reject(“Ordered takeout”);
}
}, 2000);
});
Để khởi tạo một promise, áp dụng các phát biểu sau vào object promise:
promise
.then(function)
.catch(function)
nơi promise tham chiếu object promise, và các phương thức then() và catch() chạy các hàm phụ thuộc vào
liệu promise có đã được phân giải hay bị bác bỏ. Cả hai hàm tham chiếu đến phương thức resolve và reject
lưu giữ trong executor của promise. Các phát biểu sau khởi tạo promise planDinner, sử dụng cú pháp hàm arrow
để ghi lại kết quả của promise:
planDinner
.then(msg => console.log(msg))
.catch(msg => console.log(msg));
console.log(“Planning dinner”);
Khi promise planDinner được khởi tạo, debugger console trước tiên hiển thị thông điệp “Planning dinner”. Trong
2 s tiếp theo, promise bị treo, sau đó promise được giải quyết bằng cách ghi lại thông điệp “Bought
groceries” nếu promise được phân giải hay “Ordered takeout” nếu promise bị bác bỏ.