2017-07-11 3 views
0

Jetzt versuche ich Angular2 Http Prozess.Angular abonnieren mit Verarbeitungsfehler

Ich weiß, wie unten Funktion:

sendGet(url) { 
    return this._http.get(url) 
    .map(res => res.json()); 
} 

test(url) { 
    this.sendGet(url) 
    .subscribe(
     data => { 
     processing data... 
     }, 
     error => { 
     processing error... 
     }, 
    () => { 
     other... 
     } 
    ); 
} 

Aber ich habe viele Test() Funktion ohne "Fehler => ...", wie unten

sendGet(url) { 
    return this._http.get(url) 
    .map(res => res.json()); 
} 

test(url) { 
    this.sendGet(url) 
    .subscribe(
     data => { 
     processing data... 
     } 
    ); 
} 

Jetzt verwendet Ich habe Fehler zu verarbeiten alle http erhalten Prozess.

Und ich denke hinzufügen 'Fehler => ...' in jeder test() -Funktion ist keine gute Methode.

Ich hoffe, es gibt vielleicht gute Methode für die Verarbeitung aller http "Fehler" durch nur eine Korrektur in sendGet() -Funktion, aber ich weiß es nicht.

Bitte lassen Sie mich wissen, wie kann ich tun?

+0

Sie könnten Ihr Observable in eine Promise und dann '.catch()' konvertieren, um alle Fehler zu erfassen, jedoch hätten Sie die Kette '.catch()' für alle Instanzen von test(). Da das Observable nichts tut, bis Sie es abonnieren, ist die einzige Möglichkeit, einen eingehenden Fehler zu fangen, der Funktionsfehler-Handler, den Sie an '.subscribe()' selbst übergeben, also glaube ich nicht, dass es einen Weg gibt, die Fehler darin zu verwalten 'sendGet()'. –

+2

Es gibt derzeit keine andere Möglichkeit als den Http-Dienst in Ihren eigenen Dienst zu integrieren. Aber die nächste Version von Angular (die momentan in RC ist) wird einen brandneuen HttpClient-Dienst haben, der einfacher zu testen, zu benutzen ist und Unterstützung für Http-Interzeptoren bietet. –

Antwort

1

Try this:

sendGet(url) { 
    return this._http.get(url) 
    .map(res => res.json()) 
    .catch(//error handling); 
} 

Mit diesem, wenn ein Fehler auftritt, wird es selbst gehen stattdessen Methoden testen

+0

Das funktioniert jetzt gut. Und es muss Observable zurückgeben, um in der Funktion test() zu verarbeiten. Gibt es eine Möglichkeit, nichts zur Verarbeitung zurückzugeben? – Alex

+0

Sie können 'Observable.empty()' zurückgeben – Skeptor

+0

Observable.empty() hat ein Problem. --- FEHLER in D: /Work/Project/FrontEnd/src/app/admin/admin-main/admin-main-search/admin-main-search.component.ts (289,47): Eigenschaft 'json' tut nicht vorhanden auf Typ '{} | Antwort'. Die Eigenschaft 'json' existiert beim Typ '{}' nicht. --- Ich denke, das zeigt, dass es etwas zurückgibt, das noch verarbeitet werden kann. – Alex

0

Sie können für angular2 http-Service-Wrapper-Dienst beenden Ausführung dort schreiben. Der Wrapper-Service kann Fehler für alle http-Anfragen mit gemeinsamem Code behandeln. Dieser Wrapper-Dienst kann auch verwendet werden, um häufig verwendete Anforderungsheader wie den Authentifizierungsheader hinzuzufügen, bevor eine HTTP-Anforderung an den Server gestellt wird. Ihre vollständige Anwendung sollte einen Wrapper-Dienst verwenden, um mit dem Server zu kommunizieren.

Eine weitere Option ist die Verwendung von http-Interzeptoren zur Fehlerbehandlung.

Verwandte Themen