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

时间:2017-06-15 14:11:01

标签: javascript node.js mongoose

有没有办法在forEach循环中使用mongoose函数,就像这个例子一样?利用计数器并到达可到达的线

   idsArray.forEach((itemId,i) =>{

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

我读过Async,但我不知道通过它实现它的方法

2 个答案:

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