2014-05-07 123 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

沒有邏輯錯誤。它執行完美但異步的方式。我想在其他條件下調節該異步過程。 –