Как отменить текущий запрос в перехватчике - Угловой 4
Как вы знаете, можно использовать Interceptors в новых версиях Angular 4.
В моем случае я хочу отменить запрос в перехватчике в некоторых условиях. Так это возможно? или, может быть, я должен спросить, как я должен это делать?
Также будет хорошо! если я нашел способ переписать некоторый ответ на запрос вместо его отмены.
Ответы
Ответ 1
Я думаю, что все, что вам нужно сделать, чтобы разрезать цепочку перехватчиков, это просто вернуть пустой Observable
например, так:
import { EMPTY } from 'rxjs';
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (stopThisRequest) {
return EMPTY;
}
return next.handle(request);
}
Ответ 2
Вдохновленный ответом @RVP, я обнаружил, что можно просто обрезать цепочку с ошибкой с помощью Observable.throw()
//...
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (stopThisRequestWithError) {
return Observable.throw('Error message');
} else {
return next.handle(req);
}
}
Это позволяет избежать выполнения обещаний ответа с неопределенными значениями.
Ответ 3
@RVP-код будет работать, мы можем сделать еще одну вещь для этого.
добавьте return
только, он также будет работать
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if(helper.isTokenExpired(tokenVal)){
return;
}
.
. <{code}>
.
}
Ответ 4
Для Углового 6 вам понадобится следующая структура для возврата пустой наблюдаемой:
import {Observable} from 'rxjs';
import {empty} from 'rxjs/internal/Observer';
//...
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (stopThisRequest) {
return Observable.create(empty);
} else {
return next.handle(req);
}
}
Ответ 5
Per RXJS 6: новая версия HttpInterceptor:
import { EMPTY } from 'rxjs';
//...
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (stopThisRequest) {
return EMPTY;
} else {
return next.handle(req);
}
}
Ответ 6
Это всего лишь небольшой вариант ответа RVP
import { NEVER } from 'rxjs';
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (stopThisRequest) {
return NEVER;
}
return next.handle(request);
}
Я использовал NEVER
вместо EMPTY
чтобы избежать использования неопределенных значений в моих подписках (или обещаниях)
Ответ 7
let sub = this.http.get(url, {headers: reqHeaders})
.subscribe(
(res) => {
res = res.json();
}
);
sub.unsubscribe();