Bài học theo mô-đun (2/4)
không đồng bộ/đang chờ
async/await là cú pháp rõ ràng hơn để làm việc với Lời hứa: mã đọc như sau
mã đồng bộ, nhưng đằng sau nó sử dụng chính xác các Lời hứa giống như bài học trước.
async function
Hàm được khai báo bằng async luôn trả về Lời hứa.
async function forty() {
return 40;
}
forty(); // Promise { 40 }
forty().then((v) => console.log(v)); // 40Ngay cả khi bạn trả về một giá trị "bình thường", hàm sẽ gói nó trong một Lời hứa đã được giải quyết.
await
Bên trong async function bạn có thể đặt await trước Lời hứa: quá trình thực thi bị tạm dừng
cho đến khi Lời hứa được giải quyết, sau đó tiếp tục với giá trị đã được giải quyết.
async function sum() {
const a = await Promise.resolve(10);
const b = await Promise.resolve(20);
return a + b; // 30
}Tương đương với kiểu .then (dài dòng hơn):
function sum() {
return Promise.resolve(10).then((a) => Promise.resolve(20).then((b) => a + b));
}await truyền bá lỗi
Nếu Lời hứa bị từ chối, await sẽ khắc phục lại lỗi. Bạn có thể bắt nó bằng cách bình thường
try/catch:
async function read() {
try {
const x = await Promise.reject(new Error('no'));
return x;
} catch (err) {
return 'error: ' + err.message;
}
}
read(); // Promise { 'error: no' }Mũi tên không đồng bộ
const double = async (n) => n * 2;
double(5); // Promise { 10 }Hãy thử nó
Xác định một `hàm async addOne(p)` nhận Promise về một số và trả về (dưới dạng Promise) số + 1. Sử dụng chờ đợi.
Hiển thị gợi ý
const n = đang chờ p; trả lại n + 1;
Giải pháp khả dụng sau 3 lần thử
Xem lại bài tập
Xác định `sumTwo(pa, pb)` async: nhận hai Promise về số, trả về tổng của chúng. Sử dụng hai lần chờ đợi tuần tự.
Hiển thị gợi ý
đợi từng cái một rồi trả về a + b.
Giải pháp khả dụng sau 3 lần thử