RxJS - как упростить наблюдаемую подписку с помощью карты слияния или карты - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть общий http-запрос к api, но сначала я получаю apiUrl из моего хранилища ngrx, которое можно наблюдать, поэтому я могу применить его к своему URL-адресу http-запроса:

  /**
   * Get API wrapper
   * @param endpoint The endpoint you want to call;
   * @param params The params you want to pass in
   */
  public get<T>(endpoint: string, params?: HttpParams): Observable<T> {
    this.facade.getConfig.subscribe((config: AppConfig) => {
      return this.authenticationService.GetToken().pipe(
        map((jwt: string) => ({
          headers: new HttpHeaders().set('Authorization', `Bearer ${jwt}`),
          params: params
        })),
        mergeMap((options: { headers: HttpHeaders; params: HttpParams }) =>
          this.http.get<T>(config.AppSettings.ApiUrl + endpoint, options)
        )
      );
    });

    return of();
  }

Я завернул остальныетребуемый код внутри this.facade.getConfig.subscribe((config: AppConfig) => {, как вы можете видеть.Могу ли я упростить это с помощью наблюдаемых операторов более высокого порядка, как я сделал это для заголовков и токена jwt?

1 Ответ

0 голосов
/ 17 февраля 2019

это то, как вы можете цеплять их на одном уровне

public get<T>(endpoint: string, params ?: HttpParams): Observable < T > {
  return this.facade.getConfig.pipe(
    mergeMap((config: AppConfig) => this.authenticationService.GetToken())
    map((jwt: string) => ({
      headers: new HttpHeaders().set('Authorization', `Bearer ${jwt}`),
      params: params
    })),
    mergeMap((options: { headers: HttpHeaders; params: HttpParams }) =>
      this.http.get<T>(config.AppSettings.ApiUrl + endpoint, options)
    )
  );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...