javascript - Node.js - 等待多个异步调用

标签 javascript node.js mongodb

我试图在渲染 Jade 模板之前进行多个 MongoDB 查询,但我不知道如何等到所有 Mongo 查询完成后再渲染模板。

exports.init = function(req, res){


    var NYLakes = {};
    var NJLakes = {};
    var filterNY = {"State" : "NY"};
    db.collection('lakes').find(filterNY).toArray(function(err, result) {
        if (err) throw err;
        NYLakes = result;
    });

    var filterNJ = {"State" : "NJ"};
    db.collection('lakes').find(filterNJ).toArray(function(err, result) {
        if (err) throw err;
        NJLakes = result;
    });

    res.render('explore/index', {
            NYlakes: NYLakes,
            NJlakes: NJLakes
    });

};

最佳答案

我是 underscore/lodash 的忠实粉丝,所以我通常使用 _.after,它创建了一个只有在被调用一定次数后才会执行的函数。

var finished = _.after(2, doRender);

asyncMethod1(data, function(err){
  //...
  finished();
});

asyncMethod2(data, function(err){
  //...
  finished();
})

function doRender(){
  res.render(); // etc
} 

由于 javascript 提升了使用 function funcName() 语法定义的函数的定义,因此您的代码自然会读取:从上到下。

关于javascript - Node.js - 等待多个异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18008479/

相关文章:

javascript - ChartJs beforeDraw 方法在发布版本中没有被调用

javascript - Typescript 中的 d3-tip 库

javascript - 使用 JS 和/或 Xpath 获取视频 src

javascript - 如何在实例方法中更新 Mongoose 子文档?

javascript - 类型错误 : Cannot read property 'body' of undefined after POST (MEAN)

node.js - 从 Node.js 服务器下载未命名文件时收到未找到错误

javascript - 限制下载次数

javascript - UI5切换 View 时如何正确进行路由匹配?

javascript - 将 2 个文本字段搜索为 1 个字段

javascript - 如何使用 JS/node 正确使用 async/await