Sequelize транзакции с обещанием. Все не удается откатить, когда одно обещание отклоняется - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть простая функция, которая использует результат начального вызова базы данных в трех других функциях, заключенных в 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.

...