2016-09-19 43 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); 
}); 
相关问题