如何使节点 js 同步

How can I make node js synchronize?

本文关键字:同步 js 节点 何使      更新时间:2023-09-26

我按照建议使用了承诺,但我仍然有一个问题,我可以安慰.log我的数组。

这是我所做的:

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);
});
} 

我试图使第二个延迟的数字更大,但它不起作用。有人知道我该如何解决它吗?

通过这种方式,您可以避免在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("***************************"); 
});  

}

在许多其他复杂的用例中,人们使用延迟查询数组。 但是您的情况很简单,您只需通过数组的长度即可掌握它。