【发布时间】:2019-01-27 01:21:50
【问题描述】:
我刚接触 knex 并遇到了交易。我认为它很有用,因为它具有回滚功能。尝试使用它(见下面的代码)
await knex.transaction(trx => {
knex.raw(delete from myTable where "id" = 1 )
.transacting(trx)
.then(trx.commit)
.catch(trx.rollback)
})
我只是想删除具有某个 id 的行而已。 工作正常,然后我尝试删除“trx.commit”。我原以为它不会应用查询,但确实如此。据我了解,如果不调用 trx.commit,查询将不会运行,也不会影响数据库。
我的理解错了吗?我是否在 knex.transactions 中不正确地使用了 knex.raw?我没有看到使用原始查询的事务示例。顺便说一句,我已连接到我的 localhost(postgresql) 中的数据库。
【问题讨论】:
-
我还注意到,有时当您忘记返回承诺或致电
.commit时,它会正确提交。话虽这么说,knex.js 对未定义的行为和在版本之间破坏它是不好的。不要强调它所做的没有记录的事情 - 坚持使用有意义并匹配文档的模式。还要注意它们的非 semver 重大更改。
标签: javascript knex.js