【问题标题】:Is it possible to make multiple HTTP calls as a transaction [closed]是否可以将多个 HTTP 调用作为一个事务进行 [关闭]
【发布时间】:2020-09-02 07:53:27
【问题描述】:

我有一种情况,我需要对不同的端点执行多个 HTTP 调用,但我需要将这些调用一起执行,即如果一个失败,另一个也应该失败或回滚。使用 RxJS 可以吗?

【问题讨论】:

  • 定义回滚。您可以在 Promise.all 中包装多个 fetch 调用,并知道它们是否都失败/成功,但这不是事务,它仍然是多个请求。
  • 不,除非在您调用的所有服务的设计中加入某种交易系统。如今,获得与您想要的类似的东西相当普遍的一种方法是两阶段提交,但这仍然不能与您在 ACID 数据库中的事务类型完全可比。
  • 这不是您可以问我们的问题。您需要询问端点的开发人员/维护人员是否有回滚功能。

标签: angular


【解决方案1】:
  • 并行:您可以使用forkJoin()。与 Promise.all() 类似,如果任何一个失败,所有订阅都会失败。
  • 嵌套方式:如果你的http调用依赖于之前的调用,你可以使用flatmap()依次执行它们。通过这种方式,您将订阅每个 http 调用,直到其中一个调用失败,因为它将下一个调用调用到 subscribe() 方法中。 (how to use flatmap/mergemap)。

【讨论】:

  • 这两种方法都不能阻止服务器执行和提交一个操作,然后失败并在下一个操作上抛出 HTTP 500 错误。
猜你喜欢
  • 1970-01-01
  • 2019-10-17
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
  • 2012-06-14
  • 2014-03-25
相关资源
最近更新 更多