我想知道当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