如何等待查询返回结果然后分配给json数组

时间:2017-04-09 15:51:02

标签: node.js mongodb mongoose

我使用 node / express / mongoose / mongodb ,我收集了"数据包。"用户可以单独设置"数据包的状态,"我试图向他们展示所有数据包的列表,并向他们显示他们为数据包设置的状态。我已经在这方面工作了几天而且无法使其正常工作。

我认为必须发生的是我必须查询第一个列表,然后遍历结果数组并添加结果,如果第一个数据包有结果的话。

它似乎是一个闭包问题或只是返回结果的时间问题。无论我怎么想出来尝试作品。

谢谢,

我在哪里:

 var Packet = mongoose.model('Packet', new Schema({
  id: ObjectId,
  userId: String,  //whom originally posted packet
  courseId: {type: Schema.ObjectId, ref: 'Course', index: true, 
            required: true }, 
  content: {type: String, index: true}, 
  status: String,
  date: {type: Date, default: Date.now}, 
  mostRecentEdit: {type: Date, default: Date.now} 
}));

var History = mongoose.model('History', new Schema({
 id: ObjectId,
 userId: String,
 status: {type: String, index: true, required: true, default: 1},
 courseId: {type: Schema.ObjectId, ref: 'Course', required: true },
 clickCounter: {type: Number, default: 1},
 packetId: {type: Schema.ObjectId, ref: 'Packet', required: true },
 date: {type: Date, default: Date.now}
}));
app.get('/api/packets/:_id', stormpath.groupsRequired(['Paid']), 
stormpath.getUser, function(req, res, next){
    var status;
    var pack;
    var newStatus;
try{
   Packet.find({courseId: req.params._id})
         .exec( function(err, packets){  
             pack = packets;
             for (i = 0; i < pack.length; i++){
                var promise = History.findOne({
                    packetId: pack[i]._id,
                   userId: req.user.email
                   })
                  .select('status')
                  .exec( function(err, package){ 
                      if(package == null){
                         status =  1
                      } else {
                        status = package.status;      
                      };
                   newStatus = status
              });
              promise.then(pack[i].status = newStatus);
         };
        res.json(pack)}
    });
  }catch(err){
    next(err);
  };
 }); 

0 个答案:

没有答案