我遇到了一个有线问题,当我使用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。但是,我需要将tiploc更改为sanox编号,referenceModel可以通过提供tiploc编号来帮助查找sanox。
//doc.time_schedule
// here is to add a array
所以我使用async,对于列表中的每个项目,我使用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(){});
}
}
});
答案 0 :(得分: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(){});
}