Node.js - wait for multiple async calls

前端 未结 5 1518
自闭症患者
自闭症患者 2020-12-01 07:33

I\'m trying to make multiple MongoDB queries before I render a Jade template, but I can\'t quite figure out how to wait until all the Mongo Queries are completed before rend

5条回答
  •  独厮守ぢ
    2020-12-01 08:03

    Wait.for https://github.com/luciotato/waitfor

    using Wait.for:

    exports.init = function(req, res){
    
        var NYLakes = {};
        var NJLakes = {};
    
        var coll = db.collection('lakes');
    
        var filterNY = {"State" : "NY"};
        var a = wait.forMethod(coll,'find',filterNY);
        NYLakes = wait.forMethod(a,'toArray');
    
        var filterNJ = {"State" : "NJ"};
        var b = wait.forMethod(coll,'find',filterNJ);
        NJLakes = wait.forMethod(b,'toArray');
    
        res.render('explore/index',
            {
                NYlakes: NYLakes,
                NJlakes: NJLakes
            }
        );
    
    };
    

    Requesting in parallel using wait.for parallel map:

    exports.init = function(req, res){
    
        var coll = db.collection('lakes');
    
        //execute in parallel, wait for results
        var result = wait.parallel.map(
                        [{coll:coll,filter:{"State" : "NY"}}
                        , {coll:coll,filter:{"State" : "NJ"}}]
                        , getData);
    
        res.render('explore/index',
            {
                NYlakes: result[0],
                NJlakes: result[1]
            }
        );
    
    };
    
    //map function
    function getData(item,callback){
    try{
        var a = wait.forMethod(item.coll,'find',item.filter);
        var b = wait.forMethod(a,'toArray');
        callback (null, b);
    } catch(err){
        callback(err);
    }
    

    I'm not familiar with mongo, so you may have to adjust the calls.

提交回复
热议问题