Ich möchte eine Bedingung in FlatMap haben, die überprüft, was von ersten beobachtbar zurückgegeben wurde. Wenn Bedingung nicht erfüllt wird, möchte ich brechen und zu anderer Seite navigieren.rxjs Bedingung innerhalb der Flatmap
this.service.getData(id)
.flatMap((data) => {
if (!data) {
return Observable.throw(new NoDataFoundError());
}
return Observable.forkJoin(
this.service.getData2(id2),
this.service.getData3(id3),
);
})
.subscribe(
([data2, data3]) => {
this.data2= data2;
this.data3= data3;
},
(err) => {
if (err instanceof NoDataFoundError) {
this.router.navigate(...);
}
}
);
Derzeit spezifische Fehler ich das Werfen und Fangen es aber ich diese Lösung nicht gefällt, wie es der Code nicht das einzige Stück ist, das einen Fehler werfen könnte und wenn skaliert nicht.
Ich dachte über Filter oder TakeWhile-Operatoren, aber ich kann die Umleitung nicht ausführen.
Ich dachte auch über die Rückkehr Observable.of statt zu werfen (in Zeile 4), aber dann würde ich tun müssen, wenn in abonnieren, die auch riecht.
Der Code sieht ziemlich gut, wie sie ist. Könnten Sie bitte Ihre Bedenken erläutern? Es gibt ein paar verschiedene Muster, die Sie verwenden könnten, aber es hängt davon ab, was sonst noch passiert. –