我正在尝试自学javascript,并且正在通过Mozilla的Express教程进行工作,并且遇到了使我感到困惑的这段代码。
对象中的每个函数都将作为回调参数传递给async.parallel中的第一个参数。我正在学习回调及其工作方式。通常,当我看到回调时,稍后会在函数中调用该回调,并将其传递给类似callback()或callback(null,result)之类的东西,但在这里看不到。知道为什么会这样吗?
请注意,count方法(来自Mongoose api)接受两个参数,第二个是回调。
exports.index = function(req, res) {
async.parallel({
book_count: function(callback) {
Book.count(callback);
},
book_instance_count: function(callback) {
BookInstance.count(callback);
},
book_instance_available_count: function(callback) {
BookInstance.count({status:'Available'},callback);
},
author_count: function(callback) {
Author.count(callback);
},
genre_count: function(callback) {
Genre.count(callback);
},
}, function(err, results) {
res.render('index', { title: 'Local Library Home', error: err, data: results });
});
};
答案 0 :(得分:1)
在文档中,您可以阅读async.parallel。
之所以看不到callback(null, result)
,是因为回调直接传递给了猫鼬。请注意,调用回调函数的是猫鼬-而非您的代码。
例如:
book_count: function(callback) {
Book.count(callback);
},
与写作相同
book_count: function(callback) {
Book.count(function(error, result) {
callback(error, result);
});
},
如您所见,第二个示例仅添加了“包装器”功能-并不是真正需要的。仅将回调传递给mongoose(具有与第一个参数相同的接受错误,而第二个则作为结果的约定)的可读性更高。