Menu
CoddyTech

Bất đồng bộ và await

Bài học 9 trên 9 trong khóa học Những phần khó trong JavaScript hiện đại (ES6+) của Coddy.

Nếu bạn đã hoàn thành bài học trước, hẳn bạn đang nghĩ rằng promise khó hiểu hoặc thậm chí khó nhớ cú pháp của nó!

Đừng lo! ES6 sẽ giúp bạn giải quyết vấn đề này. 

<i>async</i> và <i>await</i> giúp viết promise dễ dàng hơn

Hãy xem xét một hàm thực hiện một tác vụ bất đồng bộ (tốn thời gian). 

Chúng ta muốn hàm này trả về promise và cũng chờ kết quả của promise.

Nếu viết async trước một hàm JavaScript bất kỳ, hàm đó luôn trả về promise.

await sẽ khiến hàm chờ một promise và tạm dừng thực thi cho đến khi promise được giải quyết.

Hãy xem xét ví dụ lấy dữ liệu từ máy chủ, quá trình này có thể mất vài giây.

 async function fetchData () {
 	const response = await fetch("/url"); // Chờ promise hoàn thành
  	const movies = await response.json(); // Chờ promise hoàn thành
  	return movies;
  } 
  
  fetchData.then(val => console.log(val)) // Dữ liệu trả về từ API

Từ khóa await chỉ có thể dùng bên trong một hàm async.

Có thể dùng async-await trong cả hàm thông thường lẫn hàm mũi tên.

const someFunc = async (a) => { await //code }
challenge icon

Thử thách

Trung bình

Bạn được cho một hàm foo, hàm này nhận một số nguyên n và trả về một promise.

Hãy viết một hàm sum nhận hai promise làm đầu vào và trả về tổng các kết quả đã được giải quyết của chúng.

Hàm cần được đánh dấu bằng async!

Tự làm thử

const foo = async (x) => {
    return x
}

// Viết code của bạn bên dưới

Tất cả bài học trong Những phần khó trong JavaScript hiện đại (ES6+)

Tự luyện tập: Trình biên dịch JavaScript online