node.js - 异步方法,迭代器应该在更新发生时发生

标签 node.js sails.js

我有一个正在使用 Asynch.forEachSeries 迭代的数组。在迭代器中,我找到了模型并进行了更新。更新发生后,我需要迭代第二个项目。找到下面的代码。

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

});

最佳答案

我认为您应该将“ProductVariations...”包装在 promise 中。等待,直到它解决。然后调用下一个迭代器。

这段代码必须解决你的任务

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

关于node.js - 异步方法,迭代器应该在更新发生时发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39581393/

相关文章:

node.js - Sequelize 抛出 [object SequelizeInstance : tablename] error

javascript - 如何在 NodeJs 中更改 package.json 中的主文件

javascript - 子数组上的 MongoDB 查询

node.js - 部署应用程序 Sails js Heroku |应用程序错误

json - 在 sails 中以 json 格式给出参数

node.js - $Waterline ODM的pull函数用于更新Mongo数据库

node.js - Node-webkit 保护数据

javascript - 如何使用新数组更新 Promise.all?

javascript - 如何改进 Node.js 中的数据验证? (寻找最佳实践)

node.js - 如何使用 mongo-sails 在 Sails js 中存储点(lat,lng)