Mongoose在节点中的“model.findById”之后做一些事情

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

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

问题是我想保存整个集合中的文件。

那么我什么时候知道最后一个用户何时完成? 我可以以某种方式给callback,或者我可以以某种方式从mongoose完成时的信息?

我希望这是清楚我的意思是…对不起的问题抱歉

您可以将每个asynchronous调用包装在承诺中,收集承诺列表,并通过调用Promise.all()在循环外部parsing它们,然后执行您的业务逻辑。

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