是否可以像捕获左或右一样捕获RXJS过滤器?



我想知道当rxjs过滤器条件的条件不为真时,是否有可能捕获。

这是我所拥有的:

of(1)
.pipe(
map((d) => d + 1),
filter((d) => d === 0),
map((d) => d + 1), // this will go in because of the filter
)
.toPromise()
.then((d) => console.log(d)) // display indefined
.catch(() => console.log("ERRRRRROOOOOOR")) // do not display :( 

在这种情况下,当过滤器条件不为真时,我想返回一个特定的数据(或至少抛出)。

我试着给过滤器添加参数

filter(filter((d) => d === 0), "john doe")

但是这并不显示字符串,

我猜在fp-ts中等效的是捕获左边的,但我不知道你是否可以用rxjs做函数式编程,或者你是否只能用observable工作。事实上,你可以使用管道和多个操作符在我的项目中使用这个库,所以避免更改库

将是很好的。谢谢你!

你需要抛出一个错误来捕捉它!

of(1)
.pipe(
map((d) => d + 1),
switchMap((d) => {
if (d === 0) {
return of(d + 1);
}
throwError(() => new Error('Erroooooor'));
})
)
.toPromise()
.then((d) => console.log(d)) // display indefined
.catch(() => console.log('ERRRRRROOOOOOR')); // thrown if d !=== 0

也可以用iif运算符

来写
of(1)
.pipe(
map((d) => d + 1),
switchMap((d) =>
iif(
() => d === 0,
of(d + 1),
throwError(() => new Error('Erroooooo'))
)
)
)
.toPromise()
.then((d) => console.log(d)) // display indefined
.catch(() => console.log('ERRRRRROOOOOOR')); // thrown if d !=== 0

相关内容

  • 没有找到相关文章

最新更新