Javascript-在此示例中,异步并行中的回调发生了什么?

时间:2018-08-06 19:11:20

标签: javascript mongodb mongoose callback

我正在尝试自学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 });
});

};

1 个答案:

答案 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(具有与第一个参数相同的接受错误,而第二个则作为结果的约定)的可读性更高。