我正在尝试运行两个不同的mongoose查询并在同一个ejs页面中显示结果。我搜索了很多,最后找到了异步方法。我是怎么尝试这个的。
js file
router.get('/CreateSurvey', function(req, res, next) {
async.parallel([
function(callback) {
QBank.find( function ( err, classes, count ){
classes : classes
});
},
function(callback) {
QBank.findOne({_id:"H001"}, function ( err, questions, count ){
questions : questions
});
}
], function(err) {
if (err) return next(err);
res.render('CreateSurvey', QBank);
});
});
但是当我刷新' / CreateSurvey'页面不呈现。我已经下载了异步模块,并且在我的js文件中需要。 我哪里错了?
答案 0 :(得分:1)
首先,代码中的classes : classes
和questions : questions
行是什么?你想做什么?
应在任务内部调用每个callback
函数的task
参数(数组中的函数),以指示成功完成每项任务或错误。
只有在完成所有callback
之后,才会调用您正在进行实际渲染的可选主tasks
(代码中的第三个函数)。
在您的代码callback
内未调用task
。因此,最终的回调也永远不会被调用。事实上,在你的代码中只有第一个*任务被执行,除此之外没有任何事情发生。
详细了解documentation
中的async.parallel
答案 1 :(得分:1)
代码存在一些问题,您不能调用与callback
电话相对应的async
。请尝试以下方法:
router.get('/CreateSurvey', function(req, res, next) {
async.parallel({
classes: function(callback) {
QBank.find(function(err, classes, count){
callback(classes);
});
},
questions: function(callback) {
QBank.findOne({_id:"H001"}, function (err, questions, count ){
callback(questions);
});
}
}, function(err, result) {
if (err) return next(err);
res.render('CreateSurvey', result); // { classes : [c1, c2] , questions : [q1, q2] }
});
});