Chuyển đến nội dung chính
Mô-đun 7 · Bài học 2 trong tổng số 426/32 trong khóa học~12 min
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.

JS
async function forty() {
  return 40;
}

forty(); // Promise { 40 }
forty().then((v) => console.log(v)); // 40

Ngay 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.

JS
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):

JS
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:

JS
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ộ

JS
const double = async (n) => n * 2;
double(5); // Promise { 10 }

Hãy thử nó

tập thể dục#js.m7.l2.e1
Nỗ lực: 0Đang tải…

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.

Đang tải trình chỉnh sửa…
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

tập thể dục#js.m7.l2.e2
Nỗ lực: 0Đang tải…

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ự.

Đang tải trình chỉnh sửa…
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ử