我有一个观察员提交了submit$
表格。这个可观察到的结果可能是状态代码为403
的错误,这意味着用户无权并且必须先登录。
有没有办法我可以对特定的错误代码调用另一个执行授权过程的可观察对象。授权成功后,我想重复submit$
,而无需用户再次调用该可观察的对象。
为说明我要执行的步骤:
submit$
正在订阅403
authorise$
可观察对象,它具有自己的工作流程authorise$
成功后,submit$
被再次调用authorise$
中止submit$
进程时发生错误答案 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
});