如何在for循环中使用mongoose函数?

有没有一种方法,我可以在这个例子forEach循环内使用mongoose函数? 利用柜台到达可达线

idsArray.forEach((itemId,i) =>{ Place.findById(itemId,(err,item)=>{ if(err){ console.log("error") } idsArray[i] = {item.id}; // unreachable }) }) 

我读了关于asynchronous,但我不知道通过它实现它的方式

甚至更简单:使用db promise来映射元素,然后等待所有元素:

 var promises= idsArray.map((itemId,i) =>{ return new Promise(function(resolve,reject){ Place.findById(itemId,(err,item)=>{ if(err){ return reject(new Error("some")); } resolve(item); }) }); }); Promises.all(promises).then(function(arr){ console.log(arr);//all results },function(err){ throw err; }); 

我认为Jonas w有正确的答案,但是我想展示一些小的变化,而且评论区域并不是很有用。

 var mongoose = require('mongoose'); mongoose.Promise = require('bluebird'); // I like bluebird // Using exec you get fully-fledged promises from the get-go. var promises = idsArray.map( itemId => { return Place.findById(itemId).exec(); }); Promise.all(promises) .then( arr => { console.log(arr); } ) .catch( err => { throw err; } );