Анд*_*зюк 4 javascript postgresql node.js express sequelize.js
尝试实现oauth2。卡在顺序交易中。
出现错误:
执行(9edf48f7-5823-4b4f-b444-faa4c1896831):开始交易;
执行(9edf48f7-5823-4b4f-b444-faa4c1896831):COMMIT;
未处理的拒绝错误:此事务已调用提交(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);
});
Run Code Online (Sandbox Code Playgroud)
用Postgres序列化4.xx
使用自动提交功能处理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();
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,您可以完全忽略该t.commit()调用,因为如果承诺链解决,Sequelize会自动提交事务。如果您不使用回调样式进行事务处理,则应保留该样式。在我的示例中,我使用了回调样式。
祝好运!:)
| 归档时间: |
|
| 查看次数: |
5206 次 |
| 最近记录: |