我正在使用mongoose在节点中循环用户集合。我想将每个用户的数据保存在excel文件中。
Usr.findById(usrID, function(err, foundTagestipp){
sheet1.set(1, counter, 'some Userdata');
}
问题是我想在整个集合完成后保存文件。
那么我何时知道最后一个用户何时完成?我可以以某种方式将其交给回调,还是我可以以某种方式从mongoose获取信息?
我希望很清楚我的意思是什么...... 对不起那个令人讨厌的问题
答案 0 :(得分:1)
你可以在promise中包装每个异步调用,收集一个promises列表并通过调用Promise.all()
在循环外解析它们然后执行你的业务逻辑。
let promises = [];
myCollection.forEach(elem => {
let promise = new Promise( (resolve, reject) => {
Usr.findById(elem.usrID, function(err, foundTagestipp){
if(err) {
return reject(err);
}
resolve({userId: elem.usrId, userData: foundTagestipp})
}
})
promises.push(promise);
})
Promise.all(promises)
.then(data => {
//here all the findById have already been called
//you can save your data to the csv
})