Резольвер углового маршрута rxjs - PullRequest
0 голосов
/ 03 января 2019

Мое требование - чтобы пользователи переключали учетные записи при переходе по определенной ссылке.Чтобы полностью переключить учетные записи, мне нужно вызвать две холодные наблюдаемые http и затем загрузить данные.Порядок имеет значение для всех трех запросов.

  1. Первый switchAccount $
  2. Второй updateSession $

Затем мне просто нужно получить pageData $ Cold Observable,В настоящее время я использую распознаватель, но мне трудно структурировать это с помощью 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??

}

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Вы можете объединить наблюдаемые:

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))
    )
}
0 голосов
/ 03 января 2019

Вы можете использовать switchMap для этого:

return obs1$.pipe(
    switchMap(() => obs2$),
    switchMap(() => obs3$),
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...