2014-05-07 125 views
1
async.forEach(vsr.vehicles, function(vsr_vehicle, callback){ 
    pjCustom.vehicleJson(vsr_vehicle, function(vehicleInitialize){ 
    Vehicle.find({ where: { vehicleID: (vsr_vehicle.vehicleID).toString().trim() } }).success(function(vehicleFound){ 
     if(vehicleFound){ 
     //Code Logic is working fine. 
     }else{ 
     vehicleBuild.save().success(function(vehicleNew){ // To create new vehicle of updated vsr 
      var vehicleBuild = Vehicle.build(vehicleInitialize) 
       pj.log("Update vehicle ............................") 
       temp.push(vehicleNew.vehicleID) 
      }) 
     } 
    }) 
}) 
callback() 
    },function(){ 
res.send(204) 
}) 


    //vehicleJSON 
    exports.vehicleJson = function(vsr_vehicle, callback){ 
      pjCustom.getVehicle(vsr_vehicle, function(status, vehicleId){ 
    if (status == true) { 
    vsr_vehicle.vehicleID = vehicleId 
     callback(
     { 'vehicleID':vsr_vehicle.vehicleID).toString().trim(),'vsr_id':vsr_vehicle.vsr_id}) 
     } 
    }) 
    } 


    //getvehicle 

     exports.getVehicle = function(vsr_vehicle, callback){ 
     if(vsr_vehicle.vehicleID !== undefined){ 
     callback(true, vsr_vehicle.vehicleID) 
     }else{ 
     Vehicle.find({ where: { 'vsr_id': vsr_vehicle.vsr_id }, 
      attributes: ['id', 'vehicleID'],'order': 'id DESC', 'limit': '1'    
    }).success(function(vehicles){ 
    var temp = (vehicles.vehicleID).split("-") 
    var newvehicleId = temp[0]+"-"+temp[1]+"-"+(parseInt(temp[2])+1) 
    callback(true, newvehicleId) 
     }) 
    } 
    } 

说明:Async.foreach迭代停止forcely直到第一次迭代执行

同时插入从vsr_vehicle记录。我需要检查vehicleID是否存在,如果不存在,它将获取它将创建一个新的Id。 考虑这个代码是用于更新车辆以及插入另外的“两个”新车辆。如何管理异步进程。插入新车辆。 它不会等待第一次迭代的完成,并且正在为vehicleJson和两辆新车辆生成相同的vehicleID。建议我完成这个挑战。

我的代码显然写在这里。

请在阅读之前请求复制代码并粘贴到任何JS编辑器中,您肯定会理解的比我的解释更多。

+0

建议要完成上述任务。我有多个任务。但是我仍然在很长一段时间里围绕这项任务奔波。帮帮我。 –

回答

1

您在series.forEach中的回调呼叫位置不正确。这里是修正:

async.forEach(vsr.vehicles, function(vsr_vehicle, callback){ 
    pjCustom.vehicleJson(vsr_vehicle, function(vehicleInitialize){ 
     Vehicle.find({ where: { vehicleID: (vsr_vehicle.vehicleID).toString().trim() } }).success(function(vehicleFound){ 
      if(vehicleFound){ 
       callback(); // <--- call here     
      }else{ 
       vehicleBuild.save().success(function(vehicleNew){ // To create new vehicle of updated vsr 
        var vehicleBuild = Vehicle.build(vehicleInitialize); 
        pj.log("Update vehicle ............................"); 
        temp.push(vehicleNew.vehicleID); 
        callback(); // <--- call here 
       }); 
      } 
     }); 
    }); 
    // callback();  // <--- Don't call here 
},function(){ 
    res.send(204); 
}); 

BTW,好做法,用分号(“;”)在JavaScript语句结束

+0

这个答案没有为我工作。 @Ben –

+0

我刚刚列出了使用series.forEach()的正确方法...从上面的代码可能会有Vehicle.find()和vehicleBuild.save()...的错误,很难说出什么他们是,他们的语法等 – Ben

+0

没有逻辑错误。它执行完美但异步的方式。我想在其他条件下调节该异步过程。 –