Прочтите значение обещания и передайте его следующему методу наблюдаемого - PullRequest
0 голосов
/ 18 июня 2020

В Angular 9 я создал следующий перехватчик:

@Injectable()
export class AuthorizationHeaderInterceptor implements HttpInterceptor {

  constructor(private authenticationService: AuthenticationService) { }

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

    return from(this.authenticationService.getAuthenticationHeader()).pipe(header => {

      request = request.clone({
        setHeaders: { 
          Authorization: `${header}`
        }
      });

      return next.handle(request);

    });

  }

}

Метод authenticationService.getAuthenticationHeader() возвращает Promise<string>, где строка - это значение заголовка, которое мне нужно добавить к запросу.

Итак, я использую from для преобразования Promise в Observable и pipe на Observable.

Нужно ли мне использовать map после pipe?

И правильно ли это реализовать?

1 Ответ

1 голос
/ 19 июня 2020

Поскольку вы возвращаете наблюдаемое, подходящим оператором будет switchMap.

@Injectable()
export class AuthorizationHeaderInterceptor implements HttpInterceptor {
  constructor(private authenticationService: AuthenticationService) { }
  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return from(this.authenticationService.getAuthenticationHeader()).pipe(
      switchMap(header => {         // <-- use `switchMap` here
        request = request.clone({
          setHeaders: { 
            Authorization: `${header}`
          }
        });
        return next.handle(request);
      })
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...