期待Sequelize事务等待回调函数

时间:2017-07-12 14:37:30

标签: mysql node.js transactions sequelize.js

这里我正在使用Nodejs和Mysql。并使用Sequelize模块作为ORM。 我正在使用交易来满足我的需求和内部交易我需要调用另一个api并根据响应我必须继续进行或提交交易。 问题是不等待API响应的事务。这里我要添加一些代码片段......

var errorcheck = true;
models.sequelize.transaction().then( function ( t ) {}).then( function () {
    return models.Task.find( {
        where: { "id": 1 },
        include: [{
            model: models.Evaluation,
            include : [
                {
                    model: models.EvalForm,
                    attributes : ['id','name']
                },
                {
                    model: models.Clarification,
                    attributes : ['id','status']
                }
            ]
        },{
            model: models.User,
            include: [{
                model : models.User,
                as: 'Manager',
                attributes : ["id","ManagerId","name"],
                include : [{
                    model : models.User,
                    as: 'Manager',
                    attributes : ["id","ManagerId","name"]
                }]
            }]
        }]
    }).then(function(task) {
        // new API
        client.post('api/saveEval/', finalevalObj, function(err, httpResponse, body) {
            if(body.resCode==="OK"){
                return finaltaskobj.Evaluation.updateAttributes(finalevalUpObj, { transaction: t }).then(function (data2) {

                }).catch(function (err) { errorcheck = false; return res.send({ "error": { "code": 5000, "message": err.message } }) });
            }else{
                errorcheck = false;
                errors.push(body.msg);
            }
        });


    }).then(function ( definitions ) {
        if(errorcheck){
            return t.commit();
        }else{
            return t.rollback()
        };
    });
}).then( function () {
    if(errorcheck){
       //Now Here I am calling new API. And working fine. I know this is not better way of doing.
       return res.send({"resCode":"OK"});   
    }else{
        return res.send({"resCode":"ERROR"});
    };
}, function (err) {
    return res.send({"error":{"code": 5000,"message": err.message}});
});

像这样,我在调用新API之前和之后都有很多更新。但事务在获得新API的响应之前提交。我明白我必须做点什么等待交易。我正在使用的一些" models.sequelize.Promise.map"为迭代目的和工作正常。我还有其他类似的方法吗?请通过改进相同的代码来帮助我。

非常感谢你帮助......

0 个答案:

没有答案