Comme vous le savez, il est possible d’utiliser Interceptors dans les nouvelles versions de Angular 4.
Dans le mien, je veux annuler une requête dans interceptor dans certaines conditions ... Est-ce possible? ou peut-être que devrais-je demander, c'est de quelle manière je devrais le faire?
Aussi ça va aller! si j’ai trouvé un moyen de réécrire une réponse à la demande au lieu de l’annuler.
Je pense que tout ce que vous avez à faire pour couper la chaîne d'intercepteur est simplement de retourner une Observable
vide comme ceci:
import { EMPTY } from 'rxjs';
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (stopThisRequest) {
return EMPTY;
}
return next.handle(request);
}
Inspiré par la réponse de @RVP, j'ai découvert qu'il était possible de couper la chaîne avec une erreur de la même manière simple en utilisant Observable.throw()
//...
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (stopThisRequestWithError) {
return Observable.throw('Error message');
} else {
return next.handle(req);
}
}
Cela évite de remplir les promesses de réponse avec des valeurs indéfinies.
Le code de @ RVP fonctionnera, nous pouvons faire une chose de plus pour la même chose.
ajoutez return
seulement, cela fonctionnera aussi
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if(helper.isTokenExpired(tokenVal)){
return;
}
.
. <{code}>
.
}
Pour Angular 6, vous devez utiliser la structure suivante pour retourner un observable vide:
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);
}
}