续集交易错误

Posted

技术标签:

【中文标题】续集交易错误【英文标题】:Sequelize transaction error 【发布时间】:2018-01-23 04:56:48 【问题描述】:

尝试实现 oauth2。卡在续集交易中。

得到错误:

正在执行 (9edf48f7-5823-4b4f-b444-faa4c1896831):开始交易;

正在执行 (9edf48f7-5823-4b4f-b444-faa4c1896831):提交;

未处理的拒绝错误:已为此调用提交 交易(9edf48f7-5823-4b4f-b444-faa4c1896831),你不能再 用它。 (被拒绝的查询附加为此的“sql”属性 错误)

`

at.save(transaction: t).then(() => 
                rt.save(transaction: t).then(() => 
                    t.commit();
                    return done(false, accessToken, refreshToken, 
                        expires_at: expires,
                        scope: scope);
                ).error(function(
                    err) 
                    t.rollback();
                    return done(err);
                );
            ).error(function(err) 
                t.rollback();
                return done(err);
            );

用 Postgres 续集 4.x.x

【问题讨论】:

【参考方案1】:

当您使用自动提交功能处理 Sequelize 事务时,您需要确保从每个查询中返回承诺。看起来您没有从嵌套查询中返回承诺,这意味着您的原始承诺在提交事务的第一个查询之后解析。为了等待整个提交链完成,您必须返回嵌套的 Promise。

return sequelize.transaction(t => 
  return at.save( transaction: t )
    .then(() => 
      return rt.save( transaction: t )
        .then(() => 
          return t.commit() // Commit also returns a promise, you will want that to finish too
            .then(() => 
              return done();
            );
        );
    );
);

在我上面的示例中,您可以完全省略 t.commit() 调用,因为如果承诺链解析,Sequelize 会自动提交事务。如果您没有使用回调样式进行交易,那么您应该将其保留在那里。在我的示例中,我使用了回调样式。

祝你好运! :)

【讨论】:

我正在使用异步,并且根据 Sequelize github 上的这个问题缺少等待:github.com/sequelize/sequelize/issues/7525

以上是关于续集交易错误的主要内容,如果未能解决你的问题,请参考以下文章

续集方言错误

续集测试 - 有时验证错误

错误:找不到模块“续集/类型”

节点js。续集交易

续集你正在使用sql安全更新错误

我应该如何在登录时使用续集和护照获得验证错误