这里我正在使用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"为迭代目的和工作正常。我还有其他类似的方法吗?请通过改进相同的代码来帮助我。
非常感谢你帮助......