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.navigatereturn 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

回到顶部