Nhiều việc mất thời gian như tải dữ liệu từ mạng. JavaScript xử lý chúng bằng Promise và async/await mà không làm đơ trang.
Bạn sẽ học được
- Hiểu bất đồng bộ là gì
- Dùng Promise và async/await
- Gọi API bằng fetch
- Xử lý lỗi mạng
Thuật ngữ cần biết
- Bất đồng bộ
- Việc chạy ngầm, kết quả có sau, chương trình không phải chờ.
- Promise
- Đối tượng đại diện kết quả sẽ có trong tương lai: đang chờ, thành công, hoặc lỗi.
- API
- Địa chỉ cung cấp dữ liệu cho chương trình khác dùng.
- async/await
- Cú pháp viết mã bất đồng bộ trông như mã tuần tự.
Vì sao cần bất đồng bộ?
Nếu tải ảnh mất 3 giây mà trang phải đứng chờ thì rất khó chịu. Trình duyệt giao việc đó cho nền, khi xong sẽ báo cho mã của bạn.
Gửi yêu cầuTiếp tục làm việc khácCó kết quảChạy then/await
fetch và async/await
async function layBaiViet() {
try {
const res = await fetch("https://jsonplaceholder.typicode.com/posts/1");
if (!res.ok) throw new Error("Lỗi " + res.status);
const data = await res.json();
console.log(data.title);
} catch (loi) {
console.error("Không tải được:", loi.message);
}
}
layBaiViet();Promise nhiều việc cùng lúc
const [a, b] = await Promise.all([
fetch("/api/a").then(r => r.json()),
fetch("/api/b").then(r => r.json())
]);Chạy song song nhanh hơn chờ từng việc xong mới làm việc kế tiếp.
Tình huống: Hiển thị thời tiết
Gọi API thời tiết, hiện nhiệt độ lên trang và báo lỗi khi mất mạng. Mô hình: fetch → json() → gắn vào DOM → catch báo lỗi.
Mẹo hay
Luôn kiểm tra res.ok vì fetch chỉ báo lỗi khi mất mạng, không báo khi máy chủ trả 404 hoặc 500.
Lưu ý
Quên await sẽ nhận về Promise chứ không phải dữ liệu.
Thực hành
- Gọi API công khai và in 5 bài viết đầu tiên lên trang.
- Thêm thông báo "Đang tải..." trước khi có dữ liệu.
- Thử ngắt mạng để xem khối catch hoạt động.
Tóm tắt bài học
- Bất đồng bộ giữ cho trang không bị đơ.
async/awaitlàm mã dễ đọc.fetchcần kiểm trares.okvà bọctry/catch.