У меня есть простая функция, которая использует результат начального вызова базы данных в трех других функциях, заключенных в Promise.all
app.post('/doSomething', (req, res) => {
return sequelize.transaction(t => {
return doFirstThing(req, {transaction: t})
.then((result) => {
return Promise.all([
firstPromise(result, {transaction: t}),
secondPromise(result, {transaction: t}),
thirdPromise(result, {transaction: t})
])
.then(finished => { return finished })
})
})
.then((good) => {
console.log("everything went well, commit")
})
.catch((bad) => {
console.log("something messed up, rollback")
console.log(bad)
})
})
Что происходит, происходит сбой thirdPromise
, и моя консоль выглядит что-то вроде этого:
Executing (527b02fc366524a762db): BEGIN TRANSACTION;
Executing (default): doFirstThing
Executing (default): firstPromise
Executing (527b02fc366524a762db): ROLLBACK TRANSACTION;
Executing (default): secondPromise
something messed up, rollback
thirdPromise failed
Проблема здесь в том, что результаты doFirstThing, firstPromise
и secondPromise
все фиксируются в базе данных, даже если предполагается откат.
Я пробовал оба, включая .catch
на Promise.all, а также исключая .then
на Promise.all.