2017-09-19 6 views
0

j'ai un gestionnaire d'événements globalangulaire 4 - Erreur Http ne va pas au gestionnaire d'erreur globale personnalisée

import { ErrorHandler, Injectable, Injector } from '@angular/core'; 
import { Router } from '@angular/router'; 
@Injectable() 
export class GlobalErrorHandler implements ErrorHandler { 
errorMsg: string; 
stackTrace: string; 
constructor(private injector: Injector) { 
} 
handleError(error) { 
    var router = this.injector.get(Router); 
    this.errorMsg = JSON.parse(error._body).message; 
    this.stackTrace = JSON.parse(error._body).stackTrace; 
    router.navigate(["error", { errMsg: this.errorMsg, stackTrace:this.stackTrace }]); 
    //alert(error._body); 
} 
} 

J'inclus dans les fournisseurs:

providers: [PricingEventService, { 
    provide: ErrorHandler, 
    useClass: GlobalErrorHandler 
}], 

J'espère GlobalErrorHandler sera appelé s'il y a une exception tout en faisant la demande HTTP (poste ou obtenir) - i jeté une exception dans la méthode post

saveEvent(event: PricingEvent): Observable<string> { 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 

    return this.http.post('/pricingevent', event, options) 
     .map((response: Response) => <string>response.json().value.errMsg); 
} 

Cependant, le GlobalErrorHandler n'a jamais été appelé - si j'utilise une méthode .catch dans l'appel de service, il va capturer l'exception que j'ai jeté du serveur.

Quelqu'un peut-il me dire pourquoi et comment résoudre ce problème?

Merci

Répondre

0

Essayez cette

this.http.post(url, JSON.stringify(data), {headers: headers}) 
     .map(resp => resp.json()) 
     .catch(err => throw new Error('I am not working')); 
+2

la dernière chose que je veux faire est d'ajouter .catch dans tous les sens .. Même si je suis assez sûr que cela fonctionnerait. – Colt