Wie funktioniert der HTTP-Fehler-Handhabung arbeiten mit observablen?
Sehe ich eine Menge von tutorials zu tun so etwas wie dieses:
http.get("...").subscribe(
success => console.log('hello success'),
error => console.log('bye error')
);
Ich weiß nicht, wie das funktioniert, da gibt es keine Arten oder etwas, jedoch ich habe versucht zu tun, die mich und die ich am Ende, dass die Anfrage geht immer zu Erfolg, auch wenn ich einen Fehler. Was ist das problem?
Störenfried:
this.memberService.create(this.currentMember)
.subscribe(
success => {
let mem: Member = success.json() as Member;
if (this.selectedOrganization) {
this.addMemberToOrganization(mem);
} else if (this.selectedServiceProvider) {
this.addMemberToServiceProvider(mem);
} else {
this.toastsService.error("lbl_users_service_provider_and_organization_undefined");
}
},
error => console.log(error)
);
Create-Methode in den memberService:
create(member: Member): Observable<any> {
return this.http
.post(this.RESOURCE_BASE_URL, member)
.map(response => {
if (response.status === 200) this.toastsSerivce.success(this.translateService.instant('lbl_users_member_created'));
return response;
})
.catch(error => this.toastsSerivce.error(this.translateService.instant('lbl_users_member_create_failed')));
}
Ich auch den Fehler abzufangen, aber die subscribe
Teil scheint nicht zu kümmern.
Es scheitert an success.json()
, denn wenn es ein Fehler ist, es gibt keine json
. Aber wenn es ein Fehler ist, will ich es nennen, die error =>...
statt der success
. Jede Beratung wird sehr geschätzt.
an deiner Stelle würde ich überprüfen innen "abonnieren" - Rückruf: if(Daten.Fehler)
Ich könnte das machen, aber das fühlt sich nicht wie der richtige Weg. Winkel hat das error-handling eingebaut, aber ich weiß einfach nicht, wie es zu benutzen.
Wenn Sie sprechen über die Fehler, sprichst du von einem 4XX/5XX-code? Denn so eckig ist der eingebaute Http-Fehler erkennt.
Mindestens ein status-code, aber in der Regel auch eine Ausnahme-Meldung, soweit ich weiß. Aber wie auch immer, ich würde mich freuen, wenn es würde sogar erkennen, dass es ein Fehler ist.
ich denke, Sie sollten etwas bekommen, das werden wieder im inneren Ihrer "fangen" wie "Rückkehr zu Beobachten.werfen(errMsg);" statt toast...
Ich könnte das machen, aber das fühlt sich nicht wie der richtige Weg. Winkel hat das error-handling eingebaut, aber ich weiß einfach nicht, wie es zu benutzen.
Wenn Sie sprechen über die Fehler, sprichst du von einem 4XX/5XX-code? Denn so eckig ist der eingebaute Http-Fehler erkennt.
Mindestens ein status-code, aber in der Regel auch eine Ausnahme-Meldung, soweit ich weiß. Aber wie auch immer, ich würde mich freuen, wenn es würde sogar erkennen, dass es ein Fehler ist.
ich denke, Sie sollten etwas bekommen, das werden wieder im inneren Ihrer "fangen" wie "Rückkehr zu Beobachten.werfen(errMsg);" statt toast...
InformationsquelleAutor codepleb | 2017-06-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, das Problem ist, dass Sie nicht
throwing
den Fehler mit einemObservable.throw(errMsg)
.So, Sie können es einfach verwenden, wie diese:
In deinem Beispiel:
Aber, Sie können einen Fehler-handler, wie das Eckige schlägt hier:
Und so, Ihre Methode wäre mehr wie folgt Aussehen:
Es ist tatsächlich sauberer und wiederverwendbar für die anderen Methoden, die Sie möglicherweise erstellen Sie innerhalb Ihres Dienstes.
Ich würde vorschlagen, um auch eine Antwort-handler, wie die von Angular - Entwickler:
this.extractData
.Obviusly, im Fehler-handle-Methode können Sie Ihre eigenen benutzerdefinierten Logik, hängt davon ab, wie Sie sich zeigen wollen, oder den Fehler behandeln.
HINWEIS: ich habe nicht testen Sie Ihren code noch den code, den ich hier gepostet. Aber ich wollte zeigen, - /express-Konzept. Sollten Sie werfen den Fehler nicht in
success
jedesmal, wenn. Wie Sie damit umgehen, hängt von Ihnen und Ihrem App.catch
konvertieren muss, das Ergebnis einerObservable.throw()
während der Erfolg blockieren kann, nur zurück, was auch immer Objekt, das es sich wünscht? Bedeutet: Wenn Sie sich bei einem HTTP-Aufruf, die Sie immer automatisch einsuccess
wenn Sie nicht explizit tunObservable.throw
? Ok, es beginnt Sinn zu machen, da Sie vielleicht nicht immer wollen, um den Fehler zu behandeln in Ihrer box abonnieren. Ich wäre dankbar, wenn Sie mir dies bestätigen oder korrigieren, mein Gedanken-Fehler. Trotzdem danke für deine Hilfe! 🙂Wenn Sie nicht werfen Fehler, dann sind nicht die Handhabung der Fehler, daher Ihr Abo immer zum Erfolg, nicht erkennen, einen Fehler zu löschen. Das ist, wie ich es auch verstehen. 😀
Ich habe dies gefunden: xgrommx.github.io/rx-book/content/getting_started_with_rxjs/... ich werde Schatz, es selbst und Lesen Sie es ein paar mal, ich fand es sehr nützlich. Wenn Sie bemerken, wenn der Fehler nicht behandelt oder throwed, erhalten Sie die Daten so, wie Sie ist, auch wenn der Fehler/scheitern.
InformationsquelleAutor SrAxi