【发布时间】:2017-12-02 16:44:58
【问题描述】:
我想在 flatMap 中有一个条件来检查第一个 observable 返回的内容。如果不满足条件,我想中断并导航到不同的页面。
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(...);
}
}
);
目前我正在抛出特定错误并捕获它,但我不喜欢这种解决方案,因为它不是唯一可能抛出错误的代码,并且 if 没有缩放。
我考虑过 filter 或 takeWhile 运算符,但我无法执行重定向。
我还考虑过返回 Observable.of 而不是 throw(在第 4 行),但是我必须在 subscribe 中执行 if ,这也有异味。
【问题讨论】:
-
代码看起来相当不错。您能否详细说明您的担忧?您可以使用几种不同的模式,但这取决于其他情况。