0

ich eine Verwirrung über switchMap haben in rxjs beobachtbare:rxjs switchMap onerror Verhalten

zum Beispiel i nächsten Code haben:

Observable.fromEvent(button, 'click') .switchMap(() => Observable.fromPromise(fetch('http://return-error.com'))) .subscribe( (response) => { console.log(response); }, (error) => { console.log(error); } ); Wenn ich Fehler erhalten von holen, Abonnement unterbrochen wird. Gibt es also einen Weg, um ein neues Abonnement für einen Fehler zu erstellen?

Ich habe sogar versucht, Fehler zu erfassen und Observable zurückgeben, aber das Abonnement wird trotzdem unterbrochen.

upd: wie mit angular 2 umzugehen http.get statt holen?

Antwort

1

Es ist immer hilfreicher, wenn Sie einen Bin erstellen, wenn Sie diese Fragen stellen. Ich habe es für dich getan.

Sie müssen einfach den Fehler im Abrufaufruf verschlucken. Z.B.

fetch('bad-url').catch(err => 'Error but keep going')

Hier ist die Demo. Klicken Sie auf das Dokument (Ausgabe), um das Ereignis auszulösen.

http://jsbin.com/vavugakere/edit?js,console,output

(Sie werden mit nativem einen Browser benötigen Implementierung holen oder es wird einen Fehler melden)

+0

danke, es funktioniert wirklich. Wissen Sie, wie Sie im Fall von eckigen 2 http.get statt holen umgehen? –

+0

@MichailLinkov Ich bin froh, dass es geholfen hat! Ich bin ein React-Typ, der auch RxJS liebt. Ich kenne Angulars Methoden nicht. Aber wenn "http.get" ein Versprechen zurückgibt, können Sie es mit einem Haken behandeln. Wenn es einen beobachtbaren Fehler zurückgibt, gibt es verschiedene Möglichkeiten, dies abhängig von Ihren Anforderungen zu behandeln. –

+0

Angular 2 HTTP gibt beobachtbare, ersten Weg ist Anruf toPromise, aber Sie sagen, dass trere sind verschiedene Wege, zweite ist Wiederzulassung) auch ich bin neugierig zu wissen, ist es Bug oder Feature dieses Verhalten von SwitchMap bei Fehler, weil es keinen Anruf gibt onComplete Callback nach onError –