异步.强制停止每个迭代,直到第一个迭代执行


    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)
        })
   }
  }

解释:

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

我的代码在这里写得很清楚。

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

您的系列回调调用。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);
});

顺便说一句,为了更好的实践,在javascript语句的末尾使用分号(";")

最新更新