首页 文章

使用promise链和所有的node-postgres事务

提问于
浏览
0

https://node-postgres.com/features/transactions我尝试使用pg为我的项目实现一些事务API,遵循上述文档 . 但有一件事突然出现,一个连接(客户端)可以并行处理两个事务吗?

例如,我通过查询创建一个事务('BEGIN'),在这个事务中,我将有一个promiseChain1,在每个步骤中,将执行一个sql . 最后一步是进行查询('COMMIT')和catch(err => query('ROLLBACK'))

伪代码: BEGIN.then(SQL1_1).then(SQL1_2).then(SQL1_3).then(COMMIT).catch(ROLLBACK)

我将再次通过查询('BEGIN')创建另一个事务,与前一个事务类似,将创建另一个promiseChain2,类似于前一个 . 伪代码: BEGIN.then(SQL2_1).then(SQL2_2).then(COMMIT).catch(ROLLBACK)

我要做的最后一件事是调用Promise.all([promiseChain1,promiseChain2]) . 然后(...)

根据每个sql语句执行的时间,两个BEGIN的顺序,两个COMMIT / ROLLBACK和来自两个链的其他sql语句可能是随机的,对吧?

BEGIN
SQL1_1
        BEGIN
SQL1_2
        SQL2_1
        SQL2_2
        COMMIT
SQL1_3
ROLLBACK

但由于两个“交易”实际上使用相同的连接,我认为结果将与我期望的非常不同 .

任何人都可以澄清这是否会成为一个问题,使用pg的交易概念与承诺链和所有?

1 回答

  • 0

    看起来客户端是特定客户端凭据的连接池 . 并且您使用单独的异步流程开始事务,它将工作而不会影响其他人 . 如果两者都是 isolated promise chain 两者将在池上使用单独连接(如果可用)或等待新连接可用 .

    enter image description here

相关问题