javascript - Javascript - 在这个例子中异步并行的回调发生了什么?
问题描述
我正在尝试自学 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 });
});
};
解决方案
在文档中,您可以阅读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 更具可读性(它与第一个参数接受错误的约定相同,第二个参数接受结果)。
推荐阅读
- php - 如何根据购物车中的产品数组或类别隐藏 DIV?
- inheritance - Automapper:继承的映射不包括扁平化的属性
- django - 熊猫的替换功能似乎不起作用
- c# - Antlr4:如何将当前令牌的值传递给词法分析器的谓词?
- reactjs - React-router 自定义道具未传递给组件。三元运算符无法正常工作
- c++ - 函数 main 中引用的未解析的外部符号 __imp_glewInit
- android - 我的 jqMath 没有正确格式化 \text 和 \table
- android - 使用具有滚动视图行为的工具栏时,BottomNavigationView 覆盖内容
- javascript - 如何使用javascript从数组中的嵌套值计算平均值?
- python - 在 Pandas 中合并多个数据列