Как отменить текущий запрос в interceptor-Angular 4
Как вы знаете, это можно использовать перехватчики в новых версиях Angular 4.
в моем, я хочу отменить запрос в interceptor в некоторых условиях. Так это возможно? или, может быть, я должен спросить, как мне это сделать?
также все будет в порядке! если бы я нашел способ переписать какой-то ответ на запрос вместо его отмены.
6 ответов
Я думаю, что все, что вам нужно сделать, чтобы сократить цепочку перехватчиков просто возвращать пустой Observable
вот так
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (stopThisRequest) {
return Observable.empty();
} else {
return next.handle(req);
}
}
вдохновленный ответом @RVP, я обнаружил, что можно разрезать цепь с ошибкой таким же простым способом, используя Observable.throw()
//...
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (stopThisRequestWithError) {
return Observable.throw('Error message');
} else {
return next.handle(req);
}
}
это позволяет избежать выполнения обещаний ответа с неопределенными значениями.
код@RVP будет работать, мы можем сделать еще одну вещь для того же.
добавить return
только, он также будет работать
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if(helper.isTokenExpired(tokenVal)){
return;
}
.
. <{code}>
.
}
к угловому 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);
}
}
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);
}
}
let sub = this.http.get(url, {headers: reqHeaders})
.subscribe(
(res) => {
res = res.json();
}
);
sub.unsubscribe();