Đây là bài 3 của chương 5: Promise và async/await, thuộc khóa demo JavaScript. Nội dung được dùng để trải nghiệm cấu trúc chương trình học; hãy thực hành trên dữ liệu và môi trường thử nghiệm riêng. Trong dự án xuyên suốt, bạn sẽ xây dựng ứng dụng danh sách công việc có tìm kiếm, lọc và lưu trạng thái trên trình duyệt.
Mục tiêu cụ thể
Async/await tổ chức mã bất đồng bộ dễ đọc, nhưng không tự xử lý lỗi. Fetch chỉ reject với một số lỗi mạng; mã HTTP lỗi vẫn phải kiểm tra qua response.ok.
Đề bài thực hành
Viết bộ tìm kiếm có trạng thái loading, empty, success và error; dùng dữ liệu giả lập nếu chưa có API.
Quy trình từng bước
- Xác định đầu vào, đầu ra và trạng thái trước khi bắt đầu. Với promise và async/await, hãy ghi lại kết quả bạn mong muốn trước khi chạy ví dụ.
- Tạo bản thử nhỏ nhất trong một thư mục hoặc môi trường riêng. Chỉ dùng dữ liệu giả; không sao chép token, tài khoản hoặc dữ liệu cá nhân vào bài tập.
- Thực hiện yêu cầu: Viết bộ tìm kiếm có trạng thái loading, empty, success và error; dùng dữ liệu giả lập nếu chưa có API.
- Quan sát kết quả và so sánh từng điều kiện chấp nhận. Khi chưa đạt, thay đổi một yếu tố mỗi lần để biết thay đổi nào tạo ra tác động.
- Lưu kết quả cùng ghi chú giải thích quyết định. Người khác cần tái hiện được thao tác mà không phải đoán cấu hình hoặc dữ liệu ban đầu.
Điểm khởi đầu
async function loadTasks(signal) {
const response = await fetch("/api/tasks", { signal });
if (!response.ok) throw new Error(`HTTP ${response.status}`);
return response.json();
}
Đối chiếu kết quả
- Xử lý được HTTP 500
- Kết quả cũ không ghi đè truy vấn mới
- Loading luôn được kết thúc
Nếu kết quả khác dự kiến
Gửi nhiều tìm kiếm liên tiếp có thể khiến kết quả cũ ghi đè kết quả mới. Hủy request cũ hoặc kiểm tra mã phiên request trước khi cập nhật giao diện.
Chụp hoặc ghi lại đầu vào và đầu ra trước khi sửa. Xác nhận tệp đã lưu, đúng môi trường đang chạy và dữ liệu thử vẫn giữ nguyên. Sau khi sửa, chạy lại cả trường hợp ban đầu lẫn một trường hợp biên để tránh sửa được một nhánh nhưng làm hỏng nhánh khác.
Sản phẩm cần lưu
- Mã nguồn hoặc sơ đồ của bản thử.
- Dữ liệu đầu vào có thể dùng lại.
- Ba kết quả kiểm tra kèm giải thích.
- Một ghi chú về điều bạn sẽ làm khác nếu triển khai cho người dùng thật.