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;

そして最も重要なのは、列車の時刻表です。列車の時刻表は、到着、出発、tiplocなどのjsonオブジェクトのリスト(doc.time_schedule)です。ただし、tiplocをsanox番号に変更する必要があります。これは、referenceModelがtiploc番号を提供することでsanoxを見つけるのに役立ちます。

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

したがって、非同期を使用します。リスト内の各項目について、referenceModelを使用してsanoxにクエリを実行し、配列を作成します。a.timelineを使用して各bを格納し、最後に非同期の各操作が終了すると、trainModelは次の配列を持つオブジェクトを格納します。 sanoxオブジェクト。ただし、mongodbデータベースに関しては、sanoxオブジェクトの配列のみが空であり、非同期操作が原因だと思いますが、非同期を使用したため、なぜ機能しないのですか?

                    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非同期を起動した後、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 に答える