gpt4 book ai didi

angular - 平面图内的 rxjs 条件

转载 作者:行者123 更新时间:2023-12-03 00:05:03 26 4
gpt4 key购买 nike

我想在 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(...);
}
}
);

目前,我正在抛出特定错误并捕获它,但是我不喜欢这个解决方案,因为它不是唯一可能抛出错误的代码,并且 if 无法扩展。

我考虑过过滤器或 takeWhile 运算符,但我无法执行重定向。

我还考虑过返回 Observable.of 而不是抛出(在第 4 行),但随后我必须在 subscribe 中执行 if 操作,这也很糟糕。

最佳答案

您可以执行this.router.navigatereturn Observable.empty()里面.flatMap 。这样你就会有一个 if声明。

.flatMap(data => {
if (!data) {
this.router.navigate(...);
return Observable.empty();
}
return (...);
})

但通常Observables 应该是惰性且纯粹的(没有副作用),这将使它们可预测且易于组合。副作用只能由订阅者执行。

在您的具体情况下,正确的解决方案似乎是将此逻辑放入路由保护中,如此处所述 - https://stackoverflow.com/a/39162538/3772379

关于angular - 平面图内的 rxjs 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47610150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com