我按建议使用了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);
});
}
我试过让第二次延迟的数量变大但是没有用。 任何人都知道如何解决它?
答案 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("***************************");
});
}
在许多其他复杂的用例中,人们使用延迟查询数组。但是你的情况很简单你可以通过数组的长度抓住它。