Angular - получение вложенных результатов с помощью двух различных методов http get, последний использует первые данные - PullRequest
0 голосов
/ 27 марта 2019

Внутри одного распознавателя мне нужно получить пользовательские данные. Сначала мне нужно проверить, имеет ли его профиль «Продажи», если да, используя возвращенное имя пользователя, я должен получить данные salesPerson из другого метода http get или же вернуть некоторые данные, которые я могу проверить, если они пустые.

У меня есть 2 разных метода:

userInfo(): Observable<User> {
        return this.httpClient.get('/endpoint/api/auth/me')
            .pipe(
                map(result => result['user'])
            )
    } // in this observable there is the username and profile inside.

getSalesPerson(username) {
    return this.httpClient.get<ISalesRep>(`${this.BASE_URL}/getVendedor?user=${usuario}`);
  } // is this observer there is salesPerson data with SalesPersonId

Наблюдатели обоих различны. Первый вопрос: при разрешении метода resolver, какой тип должен использоваться? Первый использует интерфейс IUSer, а второй использует интерфейс ISalesRep.

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): 
  Observable<????> | Promise<????> | ??? { ...  }

Второй вопрос: Как можно сделать возврат?

return this.loginService.userInfo()
    .pipe (
      ???someMethod???((user) => { 
        if ( user.profile == 'Sales' ) {
            return this.otherService.getSalesPerson(user.username)
            .subscribe((data) => { take the SalesPerson Observable }
        } else  {
            return empty observable or some I can check if is empty;
        }
        })
      )
    .subscribe();

Я аппетитно, кто-то может помочь Заранее спасибо

1 Ответ

0 голосов
/ 27 марта 2019

Я думаю, что-то в этом направлении должно помочь

this.loginService.userInfo()
    .pipe (
      concatMap((user) => { 
        // User is the result of the userInfo method
        if ( user.profile == 'Sales' ) {
          return this.otherService.getSalesPerson(user.username)
        } else  {
          return of(null)
        }
      }),
      concatMap((salesPerson) => {
        if (!salesPerson) { /* do something else */ }
        // the result of this.otherSerivce.getSalesPerson()
      }),
    )
.subscribe();
...