Ich schrieb eine generische Anforderungsmethode, die einen Ladeindikator anzeigen soll, während die Anfrage ausgeführt wird. Wenn ein Fehler auftritt (wie 404), zeige ich die Nachricht in .catch
und dann return Observable.empty()
, so dass der folgende Code nicht abstürzt (da keine Daten zurückgegeben werden). Das große Problem ist, dass dann auch .finally
nicht aufgerufen wird. Ist das ein Fehler? Gibt es eine Problemumgehung? Hier ist mein Code:finally() wird nicht aufgerufen, wenn leer() in catch() zurückgegeben wird
res = Observable
.of(true)
.do(() => this.store.dispatch(new ShowLoadingIndicatorAction()))
.switchMap(() => this.http.get(url, { headers: this.headers }))
.publishReplay(1)
.refCount()
.catch(error => {
this.messages.handleRequestError(error);
return Observable.empty();
})
.finally(() => this.store.dispatch(new HideLoadingIndicatorAction()));
// then later:
res.subscribe(doStuffWithData);
Gee, Sie scheinen richtig zu sein! Ich benutze 5.0.3. Scheint, dass das Anzeigen einer Nachricht in Ionic die Ladeanzeige blockiert ... Ich hätte console.log verwenden sollen, um es zu testen. Danke und entschuldigung :) – MiB
Okay - vielleicht kannst du das Questin dann auch mit "Ionic" versehen und selbst eine Antwort geben, falls jemand anderes über das Problem stolpert :) – olsn
Nun, dieses Problem scheint nicht so nützlich zu sein: Es stellt sich heraus Unsere App zeigte mehrere Ladeanzeigen, von denen einer nicht geschlossen wurde, weil der Aufruf von .finally() in diesem Stream tatsächlich fehlte. So funktioniert alles wie vorgesehen, das Problem lag vor der Tastatur .... – MiB