return conn.rollback() //where is this Promise handled?
не обрабатывается, это проблема с этим фрагментом.Вложенные обещания должны быть объединены в цепочку для поддержания правильного потока управления, то есть возвращены из обратных вызовов then
и catch
:
.then((conn)=>{
return conn.beginTransaction()
...
Требуется вложенное обещание, потому что conn
должно быть доступно в обратных вызовах then
,Более удобный способ справиться с этим - async..await
, это позволяет сгладить вложенные обещания:
try {
const salt = await bcrypt.genSalt(10)
const hash = await bcrypt.hash(newUser.password, salt)
newUser.password = hash;
const conn = await mariaDB.pool.getConnection()
try {
conn.beginTransaction()
// ...
} catch (err) {
await conn.rollback()
}
} catch (err) {
res.json({error: err})
}
Хорошо было бы сбросить ошибку после rollback
, поскольку ясно, что в этом случае что-то пошло не такточка.