2016-09-19 73 views
5

我有一個數組正在使用Asynch.forEachSeries進行迭代。在迭代器內部,我找到了模型並進行了更新。我需要在更新發生後迭代第二項。找到下面的代碼。異步方法,Iterator應該在發生更新時發生

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

所以你只是想一旦你與當前的完成移動到下一個項目? – qxz

+0

是的,在更新ProductVariation模型之後,只有下一個迭代器應該運行。 –

回答

1

我認爲你應該在承諾中包裝「ProductVariations ...」。等待,直到它解決。然後調用下一個迭代器。

此代碼必須解決你任務

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); 
}); 
相關問題