gpt4 book ai didi

node.js - pg-promise 中有没有办法触发不会影响外部事务的内部事务?

转载 作者:行者123 更新时间:2023-11-29 12:09:08 25 4
gpt4 key购买 nike

pg-promise 中,我有一种情况需要触发一个内部事务,它可以在需要时回滚,而不会导致调用事务在出错时回滚:

var db = pgp()(connection);
db.task( function (tk){
tk.method(/* Logic used to decide if I need to continue */)
.then( function(data){
if (!data) return;
tk.tx( function*(tx){
// Somewhere in here I need to fire another transaction that I don't care if it fails
// but I need things to roll back inside of it should it fail
// without cause this tx to fail
})
})
})

到目前为止,我所尝试的一切都只是在内部事务失败时导致外部事务 (tx) 回滚,而不是内部事务回滚,而外部事务继续执行可能会发生的逻辑来了。是否有一种可靠的方法可以使内部事务在子事务失败时不会导致 tx 回滚?

另外:当我尝试使用 Bluebird Promise.some(tx1, tx2) 时,这也会失败,因为失败会导致 tx 回滚,另一个 tx# 失败并回滚。

最佳答案

pg-promise 内的所有内容,顾名思义,建立在 promise 之上,包括交易逻辑,所以你要找的答案是纯粹与 promise 相关的:

如果您不希望内部 promise 的结果影响外部 promise,您只需不将该内部 promise 链接到父级,而是在本地处理/处理它。

对于您的交易,这意味着:

tk.tx(function * (t1) {
return yield t1.tx(function * (t2))
// chained inner transaction (savepoint)
});
}).then(data=>{}).catch(error=>{});

你会这样做:

tk.tx(function * (t1) {
t1.tx(function * (t2))
// unchained/localized inner transaction (savepoint)
}).then(data=>{}).catch(error=>{});
}).then(data=>{}).catch(error=>{});

即您在本地处理内部事务的结果,而不将其链接到父级。

关于node.js - pg-promise 中有没有办法触发不会影响外部事务的内部事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46229132/

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