RxJs调用可观察到的错误并重复步骤

时间:2019-03-28 17:39:27

标签: javascript angular typescript rxjs observable

我有一个观察员提交了submit$表格。这个可观察到的结果可能是状态代码为403的错误,这意味着用户无权并且必须先登录。

有没有办法我可以对特定的错误代码调用另一个执行授权过程的可观察对象。授权成功后,我想重复submit$,而无需用户再次调用该可观察的对象。

为说明我要执行的步骤:

  1. 用户尝试提交且submit$正在订阅
  2. 这最终会导致错误,状态码为403
  3. Observable调用另一个authorise$可观察对象,它具有自己的工作流程
  4. authorise$成功后,submit$被再次调用
  5. 该过程成功或失败
  6. 如果authorise$中止submit$进程时发生错误

1 个答案:

答案 0 :(得分:0)

我在这里尝试了一种方法,将我分成两个可观察对象,submit $和authenticationSubmit $,然后再次合并它们。我尚未对其进行测试,并且我正在编写两次http.post(...),所以它与您所描述的不完全相同。

import { merge } from 'rxjs';
import { filter, switchMap } from 'rxjs/operators';

...

const submit$ = http.post(...);

const authenticationAndSubmit$ = submit$.pipe(
  filter(httpResponse => httpResponse.status === 403),
  switchMap(() => authService.login()),
  filter(authResult => authResult === 'success'),
  switchMap(() => http.post(...))
);

merge(submit$, authenticationAndSubmit$)
  .pipe(
    filter(httpResponse => httpResponse.status === 200),
  )
  .subscribe(httpResponse => {
    // Do something
  });