我正在尝试学习Express,并且对回调的异步语法感到困惑。在下面的代码中,我看不到callback
函数在哪里传递给genre
和genre_books
函数。所以真的有两个问题:
回调函数实际上是传入的(如果是,从哪里传入的)?或
它们是否引用了Express异步文档中所说的“可选回调”匿名函数,而后者是异步函数的第二个参数?
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});
});
}
在猫鼬文档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);