web-dev-qa-db-fra.com

Comment annuler la requête en cours dans l'intercepteur - Angular 4

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.

15
Behnam Azimi

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);
}
14
RVP

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.

2
veritas

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}>
        .

    }
0
Kapil Thakkar

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);
    }
}
0
Ângelo Polotto