2016-09-19 27 views
5

Asynch.forEachSeries kullanılarak yinelenen bir dizi var. Yineleyicinin içinde modeli bulur ve günceller. Güncelleme yapıldıktan sonra ikinci öğeyi yinelemem gerekiyor. Aşağıdaki kodu bulun.Async yöntemi, güncelleştirme gerçekleştiğinde yineleyici olmalıdır

async.eachOfSeries(stockUpdate, function (valueSU, keySU, callbackSU) { 

    ProductVariations.findOne({id:valueSU.id}).exec(function (ePV,dPV){ 
     dPV.available_stock = parseInt(dPV.available_stock) - Qty; 
     dPV.save(function (errDPV) { 
      callbackSU(); // HERE ONCE, NEXT ITERATOR SHOULD BE CALLED 
     }); 
    }); 

}, function (err) { 
if (err) callback(err.message);      

}); 
+0

Yani sadece geçerli ile bitirdiğinizde bir sonraki öğeye geçmek isteyen görev çözmek zorundadır? – qxz

+0

Evet, ProductVariation modelini güncelledikten sonra, yalnızca bir sonraki yineleyici çalıştırılmalıdır. –

cevap

1

"ProductVariations ..." sözünü sarmalısın. Ve bekle, çözülene kadar. Ve sonra bir sonraki yineleyici çağırın.

Bu kod

let promiseProductVariations = function (valueSU, keySU) { 
return new Promise(function (resolve, reject) { 
    ProductVariations.findOne({id:valueSU.id}).exec(function (ePV,dPV){ 
     dPV.available_stock = parseInt(dPV.available_stock) - Qty; 
     dPV.save(function (errDPV) { 
      if(errDPV){ 
       reject(errDPV); 
      }else{ 
       resolve(); // HERE ONCE, NEXT ITERATOR SHOULD BE CALLED 
      } 
     }); 
    }); 
})}; 

async.eachOfSeries(stockUpdate, function (valueSU, keySU, callbackSU) { 
    promiseProductVariations(valueSU, keySU) 
    .then(function() { 
     callbackSU(); 
    }) 
    .catch(function (error) { 
     if(error) 
      console.log(error); 
     //do thomething with error 
    }); 
}, function (err) { 
    if (err) callback(err.message); 
});