我遇到了一个有线问题,当我使用 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(){});
}
}
});