Dưới đây là một ví dụ về một cái gì đó tôi muốn đơn giản hóa:Tránh callback địa ngục trong các biến/Passing nodeJs chức năng bên trong
exports.generateUrl = function (req, res) {
var id = req.query.someParameter;
var query = MyMongooseModel.findOne({'id': id});
query.exec(function (err, mongooseModel) {
if(err) {
//deal with it
}
if (!mongooseModel) {
generateUrl(Id,
function (err, text, url) {
if (err) {
res.status(HttpStatus.INTERNAL_SERVER_ERROR).send(err);
return;
}
var newMongooseModel = new AnotherMongooseModel();
newMongooseModel.id = id;
newMongooseModel.save(function (err) {
if (err) {
res.status(HttpStatus.INTERNAL_SERVER_ERROR).send(err);
} else {
res.send({url: url, text: text});
}
});
});
} else {
//deal with already exists
}
});
};
Tôi đã nhìn thấy khác SO trả lời mà họ cho bạn biết sử dụng hàm được đặt tên, nhưng không nói làm thế nào để đối phó với biến bạn muốn vượt qua hoặc sử dụng hàng đợi của jQuery. Tôi không có sự sang trọng của một trong hai.
Tôi hiểu rằng tôi có thể thay thế các chức năng ẩn danh của mình bằng các chức năng tên, nhưng sau đó tôi sẽ cần phải chuyển các biến xung quanh. Hàm bên trong của tôi truy cập res
như thế nào nếu hàm được định nghĩa ở nơi khác?
Trong khi câu hỏi này có câu trả lời thực sự tốt, tôi đã chọn câu trả lời này vì tôi nghĩ nó dẫn đến mã sạch nhất. Đó là ngay lập tức rõ ràng nơi mà các biến đến từ và nó là rất bằng phẳng. Cảm ơn! – Nepoxx
Điều này trông giống như một giải pháp tốt để tránh địa ngục gọi lại. Có bất kỳ lý lẽ nào chống lại việc sử dụng điều này hay bất kỳ nhược điểm nào không? –