0

我遇到了一个有线问题,当我使用 mongodb 存储数据时,一些数据丢失了,我认为这是因为它的异步特性

所以对于这个时间表,我会使用 re

/* 这是一个应用程序,其中使用 train_uid 和今天,*/

var today = new Date();
var day = today.getDay();
scheduleModel.findByTrainAndTime(train_uid,today,function(err, doc){
    var a = new Object();
    if(err){}
    else{
        if(doc != null)
        {   

//mongodb 数据库可以给我一些关于 train_id ,uid 的数据

        a.train_uid = doc.train_uid;
        a.train_id = train_id;

最重要的是火车时刻表,火车时刻表是 json 对象的列表( doc.time_schedule ),如到达、出发和提示位置。但是,我需要将tiploc更改为sanox编号,referenceModel可以通过提供tiploc编号来帮助找到sanox。

                   //doc.time_schedule
                   // here is to add a array

所以我使用async,对于列表中的每一项,我使用referenceModel查询sanox并构造一个数组-a.timeline来存储每个b,最后当async每个操作完成时,trainModel是存储一个带有数组的对象sanox 对象。但是当涉及到 mongodb 数据库时,只有 sanox 对象的数组是空的,我猜是因为异步操作,但是由于我使用了 async ,为什么它不起作用

                    a.train_uid = doc.train_uid;  //works
        a.train_id = train_id;   works
                    a.timeline = []   // doesn't work    
        a.timeline = new Array();                                               
        var b ;
            async.forEachSeries(doc.time_schedule,
              function(item,callback){
                   referenceModel.findStanoxByTicloc(item.tiploc_code,function(err,sanox){ 
                      try{ 
                        b = new Object();
                                            b.sanox = sanox;
                        a.time.push(b);

                      }catch(err2){

                      }
                  });   
                  callback();
              },
              function(err){
                trainModel.createNewTrain(a,function(){}); 

        }
    }
 });
4

1 回答 1

0

您在callback触发 asynchronous 之后调用find,但在它实际返回之前调用。您需要等到获得数据后才能执行此操作。以下应该更好地工作:

    async.forEachSeries(doc.time_schedule,
          function(item,callback){
             referenceModel.findStanoxByTicloc(item.tiploc_code,function(err,sanox){ 
                  try{ 
                    b = new Object();
                    b.sanox = sanox;
                    a.time.push(b);

                  }catch(err2){

                  }
                  callback();
              });   
          },
          function(err){
            trainModel.createNewTrain(a,function(){}); 

    }
于 2013-03-10T20:36:12.697 回答