我有一个用例,如果从数据库中删除用户,我需要从外部服务中删除该用户。如果这些操作中的任何一个失败,则应撤消整个删除操作。我在想是否可以这样做:
const removeUser = async (user) => {
await db.tx(async tx => {
await removeUserFromDB(tx, user)
await removeUserFromExternalService(user)
})
}
在 pg-promise 文档中,事务文档说如果 tx 回调失败,事务将被回滚。即使对不使用 tx 上下文的外部服务的调用失败,这是否仍然成立?如果回调中的任何一个操作失败,则应回滚事务。
是的,因为错误来自于
tx
方法。你可以自己尝试一下,只需在方法中抛出一个错误并查看数据库,你的用户应该在那里。