Hàm không đồng bộ cho phép bạn viết mã dựa trên lời hứa như thể mã đó là đồng bộ.
Các hàm không đồng bộ được bật theo mặc định trong Chrome, Edge, Firefox và Safari, và thật sự là rất tuyệt vời. Các phương thức này cho phép bạn viết mã dựa trên lời hứa như thể mã đó đồng bộ, nhưng không chặn luồng chính. Các hàm này giúp mã không đồng bộ của bạn ít "thông minh" hơn và dễ đọc hơn.
Hàm không đồng bộ hoạt động như sau:
async function myFirstAsyncFunction() {
try {
const fulfilledValue = await promise;
} catch (rejectedValue) {
// …
}
}
Nếu sử dụng từ khoá async trước định nghĩa hàm, thì bạn có thể sử dụng await trong hàm. Khi bạn await một lời hứa, hàm sẽ tạm dừng theo cách không chặn cho đến khi lời hứa được thực hiện. Nếu lời hứa được thực hiện, bạn sẽ nhận lại giá trị. Nếu lời hứa từ chối, giá trị bị từ chối sẽ được gửi đi.
Hỗ trợ trình duyệt
Ví dụ: ghi nhật ký một lần tìm nạp
Giả sử bạn muốn tìm nạp một URL và ghi lại phản hồi dưới dạng văn bản. Dưới đây là cách thực hiện bằng cách sử dụng lời hứa:
function logFetch(url) {
return fetch(url)
.then((response) => response.text())
.then((text) => {
console.log(text);
})
.catch((err) => {
console.error('fetch failed', err);
});
}
Và sau đây cũng là cách tương tự khi sử dụng các hàm không đồng bộ:
async function logFetch(url) {
try {
const response = await fetch(url);
console.log(await response.text());
} catch (err) {
console.log('fetch failed', err);
}
}
Số dòng vẫn như cũ, nhưng tất cả lệnh gọi lại đều biến mất. Điều này giúp bạn dễ đọc hơn, đặc biệt là đối với những người ít quen thuộc với các lời hứa.
Giá trị trả về không đồng bộ
Các hàm không đồng bộ luôn trả về một lời hứa, cho dù bạn có sử dụng await hay không. Lời hứa đó sẽ phân giải bằng bất kỳ giá trị nào mà hàm không đồng bộ trả về hoặc từ chối bằng bất kỳ giá trị nào mà hàm không đồng bộ gửi. Vì vậy, với: