2016-02-29 21 views
8

Esiste un modo per mappare non solo la risposta corretta ma anche l'errore?Risposta errore HTTP mappa

voglio ottenere un errore modificato nella funzione iscriviti

request.subscribe(
    response => { 
     this.user = response; 
    }, 
    error => { 
     this.error = error; 
    } 
); 

Ho già provato questo

let request = this.http.put(url, JSON.stringify(user)) 
.map(
    response => response.json(), 
    error => this.handleError(error) // returns a string 
); 

, ma non viene mai handleError della sedia elettrica.

Grazie in anticipo.

+0

Potete per favore elaborare un po 'di più qual è il comportamento desiderato? –

+2

Sembra un dup di http://stackoverflow.com/questions/35326689/how-to-catch-exception-correctly-from-http-request/35329086#35329086 a me –

+1

@ GünterZöchbauer Grazie, ma non lo sono chiedendo come ottenere 'catch' per lavorare. Avevo bisogno di un modo per cambiare l'oggetto error prima che la sottoscrizione fosse eseguita. – gerric

risposta

12

Per mappare il risultato della risposta di errore, è necessario utilizzare l'operatore di cattura:

let request = this.http.put(url, JSON.stringify(user)).map(
      response => response.json()) 
      .catch(
      error => this.handleError(error) 
     ); 

Il callback specificato nell'operatore mappa viene chiamato solo per le risposte di successo.

Se si desidera "mappare" l'errore, si potrebbe usare qualcosa di simile:

this.http.get(...) 
     .map(...) 
     .catch(res => Observable.throw(res.json()) 

In questo caso, verrà fornita l'errore mappato il callback definito nel secondo parametro del metodo iscriversi .

+0

Grazie, questo funziona. Ancora una piccola domanda: invece di mappare la risposta riuscita, voglio solo eseguire una funzione (void) ma voglio comunque che il comando 'catch' funzioni come sopra. Come posso raggiungere questo obiettivo? – gerric

+0

Sei libero di fare ciò che vuoi nel callback 'catch ':' .catch (res => {this.handleError (res);} ' –

+0

Scusa se la mia domanda non è chiara, voglio come un abbonamento aggiuntivo, ma solo in caso di successo, restituisce 'Observable '. Se eseguo '.map (res => doSomething(): void' restituirà' Observable '. – gerric

Problemi correlati