【发布时间】:2017-08-23 19:51:07
【问题描述】:
我盯着屏幕看太久了,似乎无法弄清楚... 基本上我使用猫鼬做 3 个查询,每个查询都基于另一个查询的结果。由于某种原因,父调用在孩子完成任务之前就完成了。这是我的代码,为什么父母不等孩子完成工作才继续?我怎样才能使代码按我的意愿运行:-)
有人告诉我要使用 Promise,但它看起来使用起来很复杂,我认为使用回调足以处理异步调用还是我错了?
var ctr = 0; // counter 1
var ct2 = 0; // counter 2
//Array to be used for the header of the csv file
var mainArr = [["Personeelsnummer", "Chauffeur", "Week 1", "Week 2", "Week 3", "Week 4"]];
// Find all users in the database
User.find({}).exec(function (err, users){
// forEach user, push some basic data into tempArr
// and lookup planned weeks (geplandeWeken) using another mongoose function
users.forEach(function(user){
var tempArr = [];
tempArr.push(user.personeelsnummer);
tempArr.push(user.fullName);
user.geplandeWeken.forEach(function(week1){
Week.findById(week1, function(err, foundWeek){
tempArr.push(foundWeek.week);
ctr++;
if(ctr === user.geplandeWeken.length){
mainArr.push(tempArr);
console.log(mainArr);
}
});
});
ct2++;
});
if(ct2 === users.length){
console.log(ct2);
csv.write(mainArr, {headers:true}).pipe(res);
}
});
长话短说:users.forEach 在 user.geplandeWeken.forEach 能够完成工作之前完成。在收集任何数据并将其存储到 csv 文件之前,会将 csv 文件发送给用户。
【问题讨论】:
-
坚持承诺,直到你理解它们。它会带你到另一个层次。然后,学习 async/await。下面的例子是很好的方向。
标签: node.js mongodb express mongoose callback