I want to have a condition inside flatMap that checks what was returned by first observable. If condition is not met I would like to break and navigate to different page.
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(...);
}
}
);
Currently I'm throwing specific error and catching it however I don't like this solution as it's not the only piece of code that could throw an error and the if is not scaling.
I thought about filter or takeWhile operators but I won't be able to execute the redirect.
I also thought about returning Observable.of instead of throwing (in line 4) but then I would have to do the if in subscribe which also smells.