gpt4 book ai didi

express - 未经处理的拒绝错误 :Transaction query already complete - knex, express.js

转载 作者:行者123 更新时间:2023-12-03 20:29:15 36 4
gpt4 key购买 nike

我试图首先检查表中的值,如果它存在,则删除另一个表中的一行并将此新数据插入该表中。

我使用了一个带有 select、del() 和 insert 命令的事务

db.transaction(trx => {
return trx('users')
.where({ username: user.username })
.select('username')
.returning('username')

.then(retData => {
retUserName = retData[0];

db('profile')
.where({ username: user.username })
.del()
.then(retData => {
return trx
.insert(profileData)
.into('profile')
.returning('*');
});
})
.then(retData => {
res.json({ ProfileData: profileData });
})
.then(trx.commit)
.catch(trx.rollback);
}).catch(err => res.status(400).json('unable to create profile'));

我收到此错误未处理的拒绝错误:事务查询已完成

但数据尚未添加到表中。

最佳答案

您正在从事务处理程序回调返回 promise ,这会导致事务自动提交/回滚,具体取决于返回的 promise 是否解决/拒绝。

https://knexjs.org/#Transactions

Throwing an error directly from the transaction handler function automatically rolls back the transaction, same as returning a rejected promise.

Notice that if a promise is not returned within the handler, it is up to you to ensure trx.commit, or trx.rollback are called, otherwise the transaction connection will hang.



在您的代码中,您混合使用这两种不同的方式来使用事务,这会导致它被提交/回滚两次。

关于express - 未经处理的拒绝错误 :Transaction query already complete - knex, express.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53619101/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com