Javascript - 在这个例子中异步并行的回调发生了啥?
Posted
技术标签:
【中文标题】Javascript - 在这个例子中异步并行的回调发生了啥?【英文标题】:Javascript - What is happening to the callbacks in async parallel in this example?Javascript - 在这个例子中异步并行的回调发生了什么? 【发布时间】:2019-01-13 19:13:27 【问题描述】:我正在尝试自学 javascript,并且正在学习 Mozilla 的 Express 教程,但我遇到了让我感到困惑的这段代码。
作为 async.parallel 中的第一个参数传递的对象中的每个函数都被传递一个回调参数。我正在学习回调以及它们是如何工作的。通常,当我看到回调时,稍后会在函数中调用它,并将其传递给回调()或回调(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】:在文档中,您可以阅读 async.parallel。
你看不到callback(null, result)
的原因是因为回调被直接传递给猫鼬。需要注意的是,调用回调函数的是 mongoose,而不是您的代码。
例如:
book_count: function(callback)
Book.count(callback);
,
和写一样
book_count: function(callback)
Book.count(function(error, result)
callback(error, result);
);
,
如您所见,第二个示例仅添加了一个“包装器”功能 - 这并不是真正需要的。将回调传递给 mongoose(它与第一个参数接受错误的约定相同,第二个参数接受结果)更具可读性。
【讨论】:
以上是关于Javascript - 在这个例子中异步并行的回调发生了啥?的主要内容,如果未能解决你的问题,请参考以下文章