2017-12-06 9 views
0

aktuelle Situation:Was ist der richtige Weg, um http Fehler zu behandeln?

  1. Ich habe eine service.ts die Daten im Backend zu speichern:

    public update(route: string, values: Array<any>): Observable<boolean> { 
        let body = { values: values }; 
    
        return this.httpClient.put(route, body, { 
        observe: 'response' 
        }) 
        .map((res) => { 
        let status = res.status; 
        switch (status) { 
         case 202: 
          return true; 
        } 
        }, error => { 
        switch (error.status) { 
         case 406: 
          return false; 
        } 
        }); 
    } 
    
  2. ich habe einen http-Interceptor, so kann ich Token an jede Anforderung anhängen:

    public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { 
        return next 
        .handle(request) 
        .do(event => { 
    
        }) 
        .catch((error: any) => { 
    
        }); 
    } 
    
  3. und ich habe eine Komponente mit einer Speichermethode, wo ich normalerweise das Ergebnis brauche:

    public save(form: FormGroup) { 
        let path = '...'; 
        this.service.update(path, form.value) 
        .subscribe(result => { 
         // success 
        }, error => { 
         // fail 
        }); 
    } 
    

Ich weiß nicht, wie man Dinge zusammensetzt. Ich trigger die Speichermethode in meiner Komponente und auch das Ergebnis (Erfolg, Fehler) in der Komponente.

Im Moment kann ich nur das Ergebnis in meinem Interceptor greifen. Aber das ist der falsche Ort dafür.

Antwort

1
public update(route: string, values: Array<any>): Observable<boolean> { 
    let body = { values: values }; 

    return this.httpClient.put(route, body, { 
    observe: 'response' 
    }); 
} 
// You don't need map for httpClient 

Dann ist die richtige Art und Weise HttpInterceptor zu implementieren ist:

public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { 
    return next.handle(request).do(
     (response: HttpEvent<any>) => { 
     // Do stuff with success 'response instanceof HttpResponse' 
     }, 
     (error: any) => { 
     // Do stuff with error 'error instance of HttpErrorResponse' 
     }); 
} 
+0

scheint diese Art und Weise zu arbeiten ... Danke! – HansDampfHH

Verwandte Themen