我有一个用例,如果从数据库中删除某个用户,我将需要从外部服务中删除该用户.如果这两个操作中的任何一个失败,则应undo撤消整个移除.我在想,有没有可能这样做:


const removeUser = async (user) => {
  await db.tx(async tx => {
    await removeUserFromDB(tx, user)
    await removeUserFromExternalService(user)
  })
} 

在pg-promise文档中,transaction文档说如果tx回调失败,transaction将回滚.即使对不使用tx上下文的外部服务的调用失败,这是否仍然有效?在这里,如果回调中的任何一个操作失败,事务都应该回滚.

推荐答案

pg-promise中的事务回调并不关心您在其中做了什么,它只处理一般异常,并对首先出现的任何异常立即执行ROLLBACK.

如果没有触发异常,则在结束时执行COMMIT.

Node.js相关问答推荐

如何使用MongoDB在Node.js 中向数组中添加项?

@nuxtjs/站点 map 错误提示:找不到包';NitroPack';

在Node.js下使用PostgreSQL客户端聚合PostgreSQL中的用户定义类型

如何在Sequelize with Postgres中将m:n关联表ID从整数迁移到UUID?

控制台显示一个长对象,我可以';每当我发布更新Mongoose数据库的请求时,我都不知道错误是什么,

无法从 mongoDB 访问数据?

PEAN auth 应用程序:为什么 Angular 拦截器总是使用BehaviorSubject 返回 null(即初始值),而不是更新后的值?

动态设置元数据,无需重复请求 NextJS 13

处理嵌套元素时,使用xml2js库解析XML时发生错误

AWS ECS 服务发现 Cors 问题?

如何为单个 mongo nodejs 驱动程序找到最佳连接池大小

node Axios 创建全局令牌变量以在单独的变量头中使用

如何在 node.js 环境中从 WebAssembly (Rust) 调用异步 JavaScript 导入函数?

Node js中向rest服务发送https请求的步骤

无法获取 CSS 文件

如何在 Node.js 中等待子进程完成

为什么我会收到错误:解决方法指定过多?

如何使用 cookie 创建 HTTP 客户端请求?

Nodejs将字符串转换为UTF-8

将 expressjs 绑定到特定的 IP 地址