Возвращение наблюдаемой из наблюдаемой в угловом HttpInterceptor

Я использую @ngrx/store для получения токена из хранилища и помещения его в заголовки HTTP, я пытался использовать flatmap mergeMap, но все они продолжают дублировать запросы http, и когда я использую take(1), он отправляет запрос цикла и зависает, это что я имею:

@Injectable()
export class AuthInterceptorService implements HttpInterceptor {
   token$: Observable<string>;

   constructor(private readonly store: Store<fromRoot.State>) {
      this.token$ = store.select(fromAuth.getToken);
   }

   intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

        return this.token$
               .map(token => {
                  if (token) {
                     request = request.clone({setHeaders: {Authorization: `Bearer ${token}`}});
                  }
               })
              .mergeMap(() => next.handle(request));
   }
}

1 ответ

Решение
return this.token$
           .map(token => {
              if (token) {
                 request = request.clone({setHeaders: {Authorization: `Bearer ${token}`}});
              }
              return request;
           })
          .switchMap((req) => next.handle(req));

Карта переключения берет одну наблюдаемую и переключает ее в другую. Вы также должны фактически передать значение при использовании карты в наблюдаемой последовательности. Я лично даже сделал бы запрос частью начального наблюдаемого потока.

Другие вопросы по тегам