我的要求是让用户在单击特定链接时切换帐户。要完全切换帐户,我需要调用两个冷的http observables,然后加载数据。顺序对所有三个请求都很重要。
然后,我只需要使pageData $冷可见即可。我目前正在使用解析器,但是在使用rxjs进行构造时遇到困难。我只关心组件中的最终页面数据,但只需要确保用户切换帐户并且会话已更新,否则后端api调用将无法获取页面数据。
我已尝试执行以下操作,但无法正常工作:
resolve(route): Observable<any> {
const switchAccount$ = this.userService.switch('account2').pipe(last());
const updateSession$ = this.userService.updateSesh();
const pageData$ = this.pageService.getData();
const switchAndUpdate$ = updateSession$.pipe(skipUntil(switchAccount$));
return pageData$.pipe(skipUntil(switchAndUpdate$.pipe(last()); // problem is that switch account and page data get cancelled somehow??
}
答案 0 :(得分:1)
您可以为此使用switchMap:
return obs1$.pipe(
switchMap(() => obs2$),
switchMap(() => obs3$),
)
答案 1 :(得分:1)
您可以结合观察到的东西:
resolve(route): Observable<any> {
const switchAccount$ = this.userService.switch('account2'); // I think last is not helpful
const updateSession$ = this.userService.updateSesh();
const pageData$ = this.pageService.getData();
return switchAccount$.pipe(
switchMap(() => updateSession$), // Or I think with margeMap works too
switchMap(() => pageData$),
catchError(error => of(error))
)
}