rxjs条件里面的平面图
我想在flatMap中有一个条件检查第一个observable返回的内容。如果条件不满足,我想打破并导航到不同的页面。rxjs条件里面的平面图
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(...);
}
}
);
目前我抛出具体的错误和追赶它不过因为它不是的代码,可能会引发错误的唯一片和如果不结垢,我不喜欢这种解决方案。
我想过filter或takeWhile操作符,但是我将无法执行重定向。
我也想过要返回Observable.of,而不是抛出(在第4行),但是接下来我将不得不在做订阅的时候也这样做。
回答:
您可以在.flatMap
内执行this.router.navigate
和return Observable.empty()
。这样您将有一个if
声明。
.flatMap(data => { if (!data) {
this.router.navigate(...);
return Observable.empty();
}
return (...);
})
但通常观测量应该是懒惰和纯(无副作用),这将使他们预测和轻松完成取景构图。副作用只能由用户执行。
在特定情况下,这似乎是正确的解决办法是把这个逻辑路径后卫,喜欢这里描述 - https://stackoverflow.com/a/39162538/3772379
以上是 rxjs条件里面的平面图 的全部内容, 来源链接: utcz.com/qa/257343.html