Mongoose在节点中的“model.findById”之后执行某些操作

时间:2017-10-16 12:41:10

标签: node.js mongodb mongoose callback

我正在使用mongoose在节点中循环用户集合。我想将每个用户的数据保存在excel文件中。

    Usr.findById(usrID, function(err, foundTagestipp){
        sheet1.set(1, counter, 'some Userdata');
    }

问题是我想在整个集合完成后保存文件。

那么我何时知道最后一个用户何时完成?我可以以某种方式将其交给回调,还是我可以以某种方式从mongoose获取信息?

我希望很清楚我的意思是什么...... 对不起那个令人讨厌的问题

1 个答案:

答案 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 
 })