Проблема
Я использую HttpInterceptor для добавления заголовка Authorize ко всем моим HTTP-запросам.Запросы отправляются в AWS API Gateway.Но, к сожалению, все мои запросы отменяются, если я их перехватываю.
Если я добавлю заголовок непосредственно в запрос, все будет работать, как ожидалось, но при получении асинхронным токеном мои первые запросы не будут выполнены, так как токен еще не доступен.Вот почему я добавил перехватчик, который выглядит следующим образом, где this.getSession () возвращает Observable из Promise:
intercept (request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return this.getSession()
.mergeMap((session: CognitoUserSession) => {
if(session.getIdToken()){
request = request.clone({
setHeaders: {
Authorization: session.getIdToken().getJwtToken()
}
});
}
return next.handle(request);
});
}
Сам запрос выполняется следующим образом:
getStoreList(): Observable<string[]> {
let uri = endpoint + 'getStores';
return this.http.get<string[]>(uri, {headers: httpHeaders}).pipe(
map((data) => {
return data;
}));
}
this.updateHistoryService.getStoreList()
.subscribe((data: string[]) => {
this.stores = ["all", ...data];
this.getData();
});
Но это приводит к: "XHR не удалось загрузить: ОПЦИИ" https: //....eu-central-1.amazonaws.com/dev/getStores "" (IЯ использую CORS, поэтому перед отправкой отправляется запрос.)
Что я пробовал
Если я изменю эту строку:
return next.handle(request);
на:
return from(next.handle(request).toPromise());
//the following works as well:
return next.handle(request).toPromise();
Я вижу в консоли, что данные успешно загружаются с сервера без отмены каких-либо запросов, но мой обратный вызов никогда не вызывается таким образом, поэтому я не могу обработать данные.