Tôi không hiểu tại sao
client.smembers
vàclient.get
(Redis lookups) cần phải là các lệnh gọi lại thay vì chỉ đơn giản là các câu lệnh - nó làm cho cuộc sống trở nên rất phức tạp.
Đó là những gì Node là. (Tôi khá chắc rằng chủ đề này đã được thảo luận nhiều lần ở đây, hãy xem qua các câu hỏi khác, nó chắc chắn ở đó)
Làm cách nào tôi có thể chắc chắn rằng tất cả các tra cứu đã được thực hiện trước khi gọi
socket.broadcast
?
Đó là những gì err
cho trong chức năng gọi lại. Đây là tiêu chuẩn của kinda Node - tham số đầu tiên trong lệnh gọi lại là đối tượng lỗi (null
nếu mọi thứ tốt). Vì vậy, chỉ cần sử dụng một cái gì đó như thế này để đảm bảo không có lỗi nào xảy ra:
if (err) {
... // handle errors.
return // or not, it depends.
}
... // process results
Nhưng điều này có vẻ rất lộn xộn.
Bạn sẽ quen với nó. Tôi thực sự thấy nó hay, khi mã được định dạng tốt và dự án được cấu trúc thông minh.
Các cách khác là:
- Sử dụng thư viện để kiểm soát luồng mã không đồng bộ (Async.js, Step.js, v.v.)
- Nếu mã kiểu mì spaghetti là những gì bạn nghĩ là lộn xộn, hãy xác định một số hàm để xử lý kết quả và chuyển chúng dưới dạng tham số thay vì ẩn danh.