如何使节点js同步?

时间:2016-07-12 09:39:48

标签: javascript arrays node.js

我按建议使用了promise,但我仍然遇到一个问题,我可以调试我的数组。

这就是我所做的:

exports.getData = function(request, response) {

    userEmail = request.body.user;

function delay(ms){ // takes amount of milliseconds
  return new Promise(function(resolve, reject){
    setTimeout(function(){ // when the time is up
      resolve(); // change the promise to the fulfilled state
    }, ms);
  });
}

    Wish.find({userEmail}).exec( function(err, docs) {
        //console.log("docs "+docs);
        var wishArray = new Array();


            for (var i=0; i<docs.length; i++) {
            if (docs[i].sub=='party') { 
                var id = docs[i].num;
                delay(100).then(function(){
                    Party.find({id}).exec(function(err, details) {
                      console.log("5");
                    wishArray.push(details);
                });
            });
            }  
        } 
    });
    delay(700).then(function(){
    console.log(wishArray);
});

} 

我试过让第二次延迟的数量变大但是没有用。 任何人都知道如何解决它?

1 个答案:

答案 0 :(得分:2)

你可以避免记录,直到完全填充wishArray,就这样。

exports.getData = function(request, response) {
userEmail = request.body.user;

Wish.find({userEmail}).exec( function(err, docs) {
    console.log("docs "+docs);
    var wishArray = new Array();
    for (var i=0; i<docs.length; i++) {

        if (docs[i].sub=='party') {
            console.log("--------------------"); 
            var id = docs[i].num;
            Party.find({id}).exec(function(err, details) {
                wishArray.push(details);
                  if(wishArray.length == docs.length){
                      console.log(wishArray);
                  }

            });
        }  
    }
    console.log("***************************"); 

});  

}

在许多其他复杂的用例中,人们使用延迟查询数组。但是你的情况很简单你可以通过数组的长度抓住它。