Я пытаюсь изучить Express, и меня смущает асинхронный синтаксис для обратных вызовов.В приведенном ниже коде я не вижу, где функции callback
передаются в функции genre
и genre_books
.Итак, на самом деле два вопроса:
действительно ли передаются функции обратного вызова (и если да, то откуда)?Или
вместо этого они ссылаются на анонимную функцию «необязательный обратный вызов», которая, согласно документации асинхронной экспресс-передачи, является вторым параметром асинхронной функции?
exports.genre_detail = function(req,res,next) {
async.parallel({
genre: function(callback) {
Genre.findById(req.params.id)
.exec(callback);
},
genre_books: function(callback) {
Book.find({'genre': req.params.id})
.exec(callback);
},
}, function(err,results) {
if (err) {return next(err)}
if (results.genre==null) {
var err = new Error ('Genre not found');
err.status = 404;
return next(err);
}
res.render('genre_detail', {title: 'Genre Detail', genre: results.genre, genre_books: results.genre_books});
});
}
В документации mongoose https://mongoosejs.com/docs/api.html#model_Model.findById, Я отмечаю упоминание синтаксиса обратного вызова, как показано ниже.Это заставляет меня думать, что обратный вызов относится ко второму параметру в асинхронной функции, но я не вижу нигде в документации, где это прописано и где показан полный синтаксис / правильное использование:
// find adventure by id and execute
Adventure.findById(id, function (err, adventure) {});
// same as above
Adventure.findById(id).exec(callback);