Tach!
Hm. Das heisst, du leitest Fehler an die Components weiter? In meinem Beispiel würde also
createFooFailure()
die Fehlermeldungen in den Store packen und die Komponente würde darauf reagieren?
Kommt darauf an. Wenn die Komponente wissen muss, dass es einen Fehler gab, dann muss sie irgendwie informiert werden. Ansonsten muss der Service, der die schutzige Arbeit erledigt, den Fehler abfangen und geeignete Maßnahmen ergreifen. Wenn die Komponenten aufgrund des Fehlers beispielsweise lediglich keine Daten anzeigen kann, dann bekommt sie halt ein null oder leeres Objekt über den next-Handler reingereicht. Zumindest wenn es sich um einen Event-Stream handelt. Bei Einmal-Dingen ist es aber auch egal, ob der Stream danach kauptt ist oder nicht, dann geht's auch über den Error-Callback.
Wie gehst du dann mit dem Erfolgsfall um? Ich bekomme das Response-Objekt ja nie zu sehen in der Komponente, das Redux-Thunk-Promise gibt mir das nicht weiter. Wobei… jetzt hast du mich unsicher gemacht, ich überprüfe das nochmal 😉
Vielleicht bin ich dir da keine große Hilfe weil ich deinen Fall so nicht habe oder vielleicht auch nicht ganz verstehe. Bei mir ist es meist so, dass ich einen HTTP-Request abschicke und die Response bekommt direkt der eigentliche Empfänger. Oder aber der Service hängt sich in die Antwort und wendet ein paar Operatoren drauf an, wie Mapping, bevor die Antwort zum Empfänger geht. Früher musste man noch dazwischengehen und das JSON zum Objekt parsen, aber das erledigt mittlerweile Angular (wenn man nicht explizit die nackige Response anfordert).
Wenn es sich lediglich um ein Daten-Eintragen handelt und für den Anwender danach der Bildschirm gewechselt werden soll (z.B. vom Eingabeformular zur Listendarstellung), dann wird das bei Angular ein Aufruf von navigate() des Routers, und der Empfänger bekommt nichts mehr mit. Im Fehlerfall bleibt aber das Formular stehen und wird um die Meldungstexte ergänzt. Ich gebe aber auch keine optische Gut-Meldung an den Anwender. Erfolgreiches Ausführen ist das was man einfach erwartet. Die Meldung liest man eh nicht mehr, wenn sie ein weiteres Mal auftaucht, oder auch nur irgendein anderer grüner Toast irgendwo zu sehen ist.
Aber für den Fehlerfall bemühe ich meinen Message-Service, der einen Meldungsdialog anzeigt. Der Service gibt ein Promise/Observable zurück, das erfolgreich ist, wenn der Anwender die Meldung mit OK wegklickt. So kann ich auch erst dann reagieren, wenn der Anwender dazu bereit ist.
dedlfix.