rxjs-使用布尔可观察流值筛选流事件

rxjs-使用布尔可观察流值筛选流事件,rxjs,observable,Rxjs,Observable,“这不是实际的代码,我只想描述一下” 我想要一个操作符,它可以根据最新的可观察流布尔值过滤我的主要可观察事件 因此,我想要所有主要的可观测事件,前提是LatesToObservableBooleanValue$为false您可以用来引用另一个可观测源的最新发射值。然后,只需基于另一个值进行过滤,然后将映射回“main”值: 此.main可观察$.pipe( 使用LatestFrom(this.theLatestObservableBooleanValue$), 过滤器(([main,boolea

“这不是实际的代码,我只想描述一下”

我想要一个操作符,它可以根据最新的可观察流布尔值过滤我的主要可观察事件

因此,我想要所有主要的可观测事件,前提是LatesToObservableBooleanValue$为false

您可以用来引用另一个可观测源的最新发射值。然后,只需基于另一个值进行
过滤
,然后
映射回“main”值:

此.main可观察$.pipe(
使用LatestFrom(this.theLatestObservableBooleanValue$),
过滤器(([main,boolean])=>!boolean),
映射(([main])=>main)
).订阅(n=>{
log(`Stream Event${n}`)
})
这是一张工作票

如果您想将其制作成您自己的自定义操作符,它可以如下所示:

函数iWantThisOperator(布尔$:可观察){
返回函数(源$:可观察){
返回源$.pipe(
withLatestFrom(布尔$),
过滤器(([,boolean])=>!boolean),
映射(([source])=>source)
)
}
}
可观测的管道(
我想要此运算符(最新的可观测布尔值$)
).订阅(()=>{
console.log('流事件')
})
操作员

如果您只需要在一个(或两个)位置使用解决方案,请使用此选项

const{Subject}=rxjs;
const{filter,switchMap}=rxjs.operators;
const condition$=新主题();
const main$=新主题();
const resultWithoutOperator$=条件$.pipe(
开关映射(条件=>main$.pipe(过滤器(()=>!条件)))
);
resultWithoutOperator$.subscribe(v=>
console.log(“#resultWithoutOperator$:”,v)
);
条件$.next(false);
下一个(1),;
条件$.next(true);
下一个(2);
条件$.next(false);
下一个(3)

您可以使用筛选器运算符或筛选器不用于可观察对象。过滤器用于另一个可以保存状态的“标志”变量。我想通过一个可观察的
this.mainObservable$.pipe(
    iWantThisOperator(() => !this.theLatestObservableBooleanValue$)
).subscribe(() => {
    console.log('Stream Event')
})