Bài học theo mô-đun (1/4)
Lời hứa: chúng là gì
Promise là giá trị đại diện cho kết quả của một thao tác sẽ kết thúc trong tương lai. Nó có thể ở một trong ba trạng thái:
- đang chờ xử lý — hoạt động vẫn đang được tiến hành
- hoàn thành — nó đã hoàn thành thành công, có một giá trị
- bị từ chối — thất bại, có lỗi
Một khi nó rời khỏi trạng thái chờ xử lý, nó sẽ được "giải quyết" mãi mãi.
Tạo một lời hứa đã được giải quyết
Hai cách phổ biến nhất - bạn hầu như sẽ không bao giờ tạo Promise "bằng tay" với hàm tạo:
const p1 = Promise.resolve(42);
const p2 = Promise.reject(new Error('oops'));Đọc kết quả: .then / .catch
Promise.resolve(10).then((v) => {
console.log(v); // 10
});
Promise.reject(new Error('no')).catch((e) => {
console.log(e.message); // 'no'
});.then nhận một hàm được gọi với giá trị đã giải quyết.
.catch nhận được hàm được gọi có lỗi trong trường hợp bị từ chối.
Xâu chuỗi
Mỗi .then lần lượt trả về một Lời hứa: bạn có thể xâu chuỗi chúng để biến đổi
giá trị từng bước.
Promise.resolve(5)
.then((n) => n * 2)
.then((n) => n + 1)
.then((n) => console.log(n)); // 11Nếu bất kỳ .then nào ném ra (hoặc trả về một Lời hứa không thành công), thì hãy thực thi
nhảy tới .catch tiếp theo đầu tiên.
Người xây dựng (hiếm)
const p = new Promise((resolve, reject) => {
if (Math.random() > 0.5) resolve('ok');
else reject(new Error('no'));
});Bạn sẽ chỉ sử dụng nó khi bạn cần "hứa hẹn" điều gì đó sử dụng lệnh gọi lại (ví dụ: API DOM cũ hoặc setTimeout).
Hãy thử nó
Xác định `promisedVersion(n)` mà, với một số, trả về một Promise được giải quyết với gấp đôi n.
Hiển thị gợi ý
trả về Promise.resolve(n * 2)
Giải pháp khả dụng sau 3 lần thử
Xem lại bài tập
Xác định `incrementThree(p)` nhận Promise về một số và trả về Promise về số đó + 3. Sử dụng chuỗi .then.
Hiển thị gợi ý
p.then((n) => n + 3)
Giải pháp khả dụng sau 3 lần thử