Я пытаюсь обновить три таблицы за одну транзакцию. если одна из таблиц не обновляется, я хочу откатить ее. Я попытался вручную выполнить запросы в базе данных MySQL, и она отлично работает. Но в коде он не работает должным образом и не откатывается.
вот код,
return sequelize.transaction({
autocommit: false
}, function(t) {
return models.VaccinationCenter.update({
email
}, {
where: {
id: vacId
}
}, {
transaction: t
}).then(function(VaccinationCenter) {
//console.log('---------------VaccinationCenter--------------------------------',VaccinationCenter)
if (VaccinationCenter[0] === 0) {
throw new Error();
//console.log('VaccinationCenter--------------error')
} else {
return models.Person.update({
email
}, {
where: {
email: prevEmail
}
}, {
transaction: t
})
.then(function(Person) {
//console.log('---------------Person--------------------------------',Person);
if (Person[0] === 0) {
//console.log('Person--------------error');
throw new Error();
} else {
return models.User.update({
email
}, {
where: {
email: prevEmail
}
}, {
transaction: t
})
.then(function(User) {
if (User[0] === 0) {
//console.log('User--------------error');
throw new Error();
} else {
callback({
statusCode: Constants.errorStatus.SUCCESS,
body: {
isValidemail: true
}
});
}
//console.log('---------------User--------------------------------',User)
});
}
});
}
});
}).then(result => {
callback({
statusCode: Constants.errorStatus.SUCCESS,
body: {
isValidemail: true
}
});
}).catch(error => {
callback({
statusCode: Constants.errorStatus.BAD_REQUEST,
body: {
isValidEmail: false
}
});
});
Вот консоль при запуске этого кода.
Executing (f4d0d13f-d72e-4cb7-bd1b-c26e6ceddaca): START TRANSACTION;
Executing (f4d0d13f-d72e-4cb7-bd1b-c26e6ceddaca): SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Executing (f4d0d13f-d72e-4cb7-bd1b-c26e6ceddaca): SET autocommit = 0;
Executing (default): UPDATE `VaccinationCenters` SET `email`='devakadabare1+12@gmail.com',`updatedAt`='2020-03-03 10:06:14' WHERE `id` = 60
Executing (default): UPDATE `People` SET `email`='devakadabare1+12@gmail.com',`updatedAt`='2020-03-03 10:06:14' WHERE `email` = 'devakadabare1+11@gmail.com'
Executing (f4d0d13f-d72e-4cb7-bd1b-c26e6ceddaca): ROLLBACK;