У меня есть функция в моем проекте Angular, которая делает запрос на получение к серверной части REST и что-то делает с данными. Ничего особенного. Это в authservice.ts.
Этот метод вызывается из перехватчика. Однако до завершения запроса перехватчик вызывает handleAuthError(), потому что метод вернул false (как??), а запрос еще не был сделан. Я вижу это, потому что в бэкэнде ничего не произошло. Затем приложение делает запрос и может обрабатывать данные.
Кто-нибудь сталкивался с этой проблемой или может предложить, как я могу это исправить?
// api.interceptor.ts
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).pipe(tap(data => {
return data;
},
error => {
// if (request.url.indexOf('/refresh') !== -1) {
// Already attempted to refresh the token. Log out
// this.authService.handleAuthError();
// } else {
// If the token can't be refreshed then log out.
if (!this.authService.refreshJwt(this.tokenService.get())) {
this.authService.handleAuthError();
}
// }
}));
// auth.service.ts
refreshJwt(token: string): boolean {
if (token == null || token.length <= 0) { return false; }
const requestUrl = this.apiUrl + '/refresh';
const requestOptions = {
headers: new HttpHeaders({
Authorization: `Bearer ` + this.tokenService.get()
}),
};
this.http.get(requestUrl, requestOptions).subscribe(
data => {
// return true;
return this.handleJwtResponse(data);
}, error => {
return false;
}
);
}
Проверил во вкладке сеть. На конечную точку /refresh отправлено два запроса, и они оба получают ответ 200. Однако только второй запрос имеет тело ответа. В первом ответе вообще нет тела..





I can see this because nothing happened in the backend<= Запрос может завершиться ошибкой по совершенно другой причине и может не дойти до сервера с самого начала. Дважды проверьте вкладку сетевой активности вашего браузера в инструментах разработчика.