【问题标题】:how to handle sequelize transaction properly如何正确处理续集交易
【发布时间】:2021-02-06 06:14:28
【问题描述】:

我使用 sequelize 事务编写了提交和回滚的代码。但是我不知道是否需要每次都声明它,通过在每个部分的顶部调用sequelize.transaction(),应该应用事务。

我想找到一种更有条理和可重用的方法。例如,我应该使用中间件还是某种设计模式?请告诉我。

--- 更新 --- 抱歉,上一个问题是错误的。

在 sequelize 中,问题是当资源访问受到事务隔离级别限制时该怎么办。

在高隔离级别下,如果同时访问一个资源,则会引发错误。有没有办法再试一次或做正确的事情?

在某些情况下甚至在表级别锁定 它直接访问数据库并释放锁。

【问题讨论】:

  • 有自动将事务传递给所有查询和自动提交的功能。这可能有点帮助。 docs.sequelizejs.com/manual/tutorial/…
  • 感谢您的回复。顺便问一下,如果查询是使用sequelize执行的,是不是出现错误会自动回滚呢?我认为这可能会导致内存泄漏,因为事务没有正常关闭。
  • 如果一个或多个promise被拒绝,它会正确回滚。
  • 非常感谢。但是即使不是sequelize返回的值,promise reject是否有效?
  • 当然。确保交易承诺中的所有内容。 pastebin.com/qemZXYuZ

标签: node.js postgresql transactions sequelize.js


【解决方案1】:

请查看zb-sequelize npm 包。 它通过添加 2 个装饰器极大地简化了事务管理。

import { Transactional, Tx } from 'zb-sequelize';

@Transactional
function fooBar(@Tx transaction) {
  foo(transaction);
  bar(transaction);
}

@Transactional
function foo(@Tx transaction) {
}

@Transactional
function bar(@Tx transaction) {
}

【讨论】:

    猜你喜欢
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 2020-05-15
    相关资源
    最近更新 更多