Quay lại danh sách case study
Xử lý callback hell trong dự án Express API
Ứng viên giải quyết tình trạng code gọi database lồng nhau quá sâu trong dự án Express.
Bối cảnh
Trong một dự án Node.js với Express và MongoDB, hệ thống cũ có một API đăng ký tài khoản nhưng lồng tới 5 lớp callback để kiểm tra email, mã hóa mật khẩu, lưu database và gửi email kích hoạt.
Vấn đề cần xử lý
Code quá khó đọc, khi có lỗi xảy ra rất khó debug và không bắt được exception chính xác, dẫn đến sập server đột ngột.
Hướng xử lý đề xuất
Refactor lại toàn bộ logic từ callback sang async/await, tách các bước thành các hàm dịch vụ riêng biệt và bọc chung trong khối try/catch.
Câu trả lời mẫu khi phỏng vấn
Khi gặp tình trạng callback hell, em đã tiến hành chuyển đổi toàn bộ sang async/await. Em tách logic thành các hàm nhỏ như userService, mailService và dùng try/catch ở tầng controller để bắt lỗi gọn gàng.
Trade-off
Việc chuyển đổi đòi hỏi viết lại khá nhiều code cũ và cần viết unit test cẩn thận để tránh làm hỏng luồng logic hiện tại.
Kết quả kỳ vọng
Mã nguồn trở nên gọn gàng hơn 50%, thời gian sửa lỗi giảm đi đáng kể và không còn hiện tượng treo server do unhandled promise rejection.
Bài học khi trả lời phỏng vấn
Luôn ưu tiên sử dụng async/await cho các tác vụ I/O trong Node.js từ đầu dự án để duy trì chất lượng mã nguồn.