节点js中的异步不起作用

时间:2017-01-26 06:34:21

标签: node.js express mongoose

我正在尝试运行两个不同的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文件中需要。 我哪里错了?

2 个答案:

答案 0 :(得分:1)

首先,代码中的classes : classesquestions : 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] }
  });
});