IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Angular Discussion :

Http Interceptor : jouer une fonction à l'issue du chargement de la requete


Sujet :

Angular

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 40
    Par défaut Http Interceptor : jouer une fonction à l'issue du chargement de la requete
    Bonjour,
    aujourd'hui je travaille sur mon interceptor, ce dernier sert uniquement a démarrer une barre de chargement lorsqu'une requête est lancée et j'aimerais également la stopper quand le résultat ou l'erreur me revient.

    Pour le moment, j'arrive très bien a la désactiver mais seulement dans le cas d'une erreur, en plaçant ma fonction d’arrêt dans le catchError (Voir code ci-après).

    Quel serait la méthode équivalente pour un retour sans erreur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    return next.handle(request)
        .pipe(
          catchError((returnedError) => {
     
            // Si erreur retournee, je desactive mon chargement
            this.loadingService.desactivate();
     
            if (returnedError.error instanceof ErrorEvent) {
              this.errorMessage = `Error: ${returnedError.error.message}`;
            } else if (returnedError instanceof HttpErrorResponse) {
              this.errorMessage = `Error Status ${returnedError.status}: ${returnedError.error.error} - ${returnedError.error.message}`;
            } 
     
            console.error(this.errorMessage ? this.errorMessage : returnedError);
            return Observable.throw(returnedError);
          })
        );
    Comment exécuter une action a l'issue positive d'une requête ?

    Si j'ajoute l'operateur tap dans mon pipe, etrangement la fonction est jouée avant le retour de la requete, cela ne fonctionne donc pas comme attendu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tap(evt => {this.loadingService.desactivate();})
    Merci par avance !

  2. #2
    Membre averti
    Inscrit en
    Août 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 40
    Par défaut
    J'ai trouvé après avoir perdu quelques poignées de cheveux

    J'avais un mat-icon qui utilisais un SVG dans /asset/ et cela provoquait une request, mais locale.

    En filtrant comme ci-dessous mon tap, tout fonctionne correctement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    tap((event: HttpEvent<any>) => {
            if(event instanceof HttpResponse) { this.loadingService.desactivate()}
          })
    J'espere que cela pourra servir à d'autres !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lancement d'une fonction non demandée au chargement du script
    Par Genestoux dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/06/2009, 13h37
  2. appliquer une fonction foreach div au chargement de la page
    Par cbalmefrezol dans le forum jQuery
    Réponses: 2
    Dernier message: 21/04/2009, 22h03
  3. [Prototype] Exécution d'une fonction à la fin du chargement de la page
    Par Herman dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 30/12/2008, 16h41
  4. executer une fonction JS a chaque chargement de page
    Par drinkmilk dans le forum Firefox
    Réponses: 1
    Dernier message: 09/11/2007, 15h25
  5. Réponses: 3
    Dernier message: 17/08/2006, 14h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo