CodeReady
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.