具有状态管理的角度为4的顺序(事务)API调用

时间:2017-10-06 08:33:52

标签: javascript angular typescript rxjs angular2-forms

我正在寻找一些建议,以便最好地履行这一要求:

我需要调用3个或4个单独的API /端点来将用户添加到我们的系统中(使用表单)。

  • 第一个电话会添加一个用户帐户并返回一个ID。
  • 第二个使用创建来自不同端点的联系人记录 以前的身份
  • 然后可能会有一两个电话来创建其他业务 基于前面步骤的域记录。

我已经阅读了一些有关多顺序请求的问题:Multiple Sequential API calls in Angular 4

但是我想知道如何使调用集合像事务一样执行,所以如果任何步骤失败(例如步骤2中的电子邮件正则表达式)我可以管理错误并跟踪步骤I' m所以我可以从那里继续而不是重新开始。

我认为我联系到的答案和localStorage的组合 - 是否有更好的解决方案?

由于

1 个答案:

答案 0 :(得分:3)

一般来说,这可以通过concatMapdomerge运营商来实现:

this.formSubmit$
  .concatMap(formData => this.http.post(...).map(user => user.id))
  .do(id => /* save id here */)
  .merge(this.recoverWithId$) // continue from here if you already have an id

  .concatMap(id => this.http.post(...))
  .do(id => /* save whatever you need here */)
  .merge(this.recoverWithWhatever$) // continue from here if already have whatever

  ...
  .retry()
  .subscribe()

如果this.http.post中的任何一个发出错误,它将被进一步传播,并且将跳过所有后续步骤。链也将处置,这就是我在retry()

之前使用subscribe().的原因

您也可以使用catch运算符,但这实际上取决于您希望实现的行为。