有没有办法在forEach循环中使用mongoose函数,就像这个例子一样?利用计数器并到达可到达的线
idsArray.forEach((itemId,i) =>{
Place.findById(itemId,(err,item)=>{
if(err){
console.log("error")
}
idsArray[i] = {item.id}; // unreachable
})
})
我读过Async,但我不知道通过它实现它的方法
答案 0 :(得分:3)
更简单:用db promises映射元素,然后等待所有这些:
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;
});
答案 1 :(得分:1)
我认为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; } );