我正在使用node
,mysql
和angular4
开发一个应用程序。在那里,我有一组与单个任务相关的功能。所有这些都是异步函数,适用于看起来像这样的承诺
setAprroveTrue(curentHOD, user, group, message, approvemail, approved_byHR = 0) { //HR or super admin can override anyones leave. default it is set as not by and hr.
return new Promise((resolve, reject) => {
Leaves.setHodMessage(group, message, curentHOD).then((messageArr) => {
q = "update leave_taken_superior_map set lstm_col_status= ? ,ltsm_all_approved = 1,ltsm_overide_by_hr = ?,ltsm_message = ? where ltsm_group_id = ?;update leave_taken set alt_leave_approved = 1 where alt_group_by = ?";
params = [config.key_word_approved_leave, approved_byHR, messageArr, group, group];
sqlq.executeQuery(q, params).then((data) => {
if (approvemail === true) {
emails.sendEmail('pavithrarox1@gmail.com', 'pavithra@gmail.lk', 'Good news! Your leave request has been approved', emails.getLeaveApprovedEmail(group))
} else {
emails.sendEmail('pavithrarox1@gmail.com', 'pavithra@gmail.lk', 'Bad news! Your leave request has been rejected', emails.getLeaveDissapprovedEmail(group))
}
//no need to wait for email to send.it will work as a background procass
resolve(data)
}).catch((err) => {
console.log(err)
reject(err)
});
}).catch((err) => {
reject(err)
})
})
}
如何在此功能中实现交易?
因此,如果setHodMessage
函数成功执行,并且executeQuery
函数出现问题。我如何回滚一切?
答案 0 :(得分:0)
您可以处理拒绝案例并同样应用逻辑。
所以每个承诺都有解决和拒绝以及阻止阻止
promise.then(
resolved=>{},
reject=>{}
).catch(error=>{});
所以在你的情况下。
setAprroveTrue(curentHOD, user, group, message, approvemail, approved_byHR = 0) { //HR or super admin can override anyones leave. default it is set as not by and hr.
return new Promise((resolve, reject) => {
Leaves.setHodMessage(group, message, curentHOD).then((messageArr) => {
q = "update leave_taken_superior_map set lstm_col_status= ? ,ltsm_all_approved = 1,ltsm_overide_by_hr = ?,ltsm_message = ? where ltsm_group_id = ?;update leave_taken set alt_leave_approved = 1 where alt_group_by = ?";
params = [config.key_word_approved_leave, approved_byHR, messageArr, group, group];
sqlq.executeQuery(q, params).then((data) => {
if (approvemail === true) {
emails.sendEmail('pavithrarox1@gmail.com', 'pavithra@gmail.lk', 'Good news! Your leave request has been approved', emails.getLeaveApprovedEmail(group))
} else {
emails.sendEmail('pavithrarox1@gmail.com', 'pavithra@gmail.lk', 'Bad news! Your leave request has been rejected', emails.getLeaveDissapprovedEmail(group))
}
//no need to wait for email to send.it will work as a background procass
resolve(data)
},()=>{
//do your rollback stuff here
}).catch((err) => {
console.log(err)
reject(err)
});
}).catch((err) => {
reject(err)
})
})
}
Lemme知道您是否需要任何帮助。
答案 1 :(得分:0)
好的,我在这里找到了问题。我无法使事务在我的应用程序上运行的原因是因为我使用了mysql.createPool
而不是mysql.createConnection
。没有选项可以在createPool中实现事务