如何让RXJS流仅在外部Observable变更时向下传递数据?
实现代码
你可以在switchMap中配合take(1)操作符实现需求,修改后代码如下:
this.objectsPropertiesChanges$ .pipe( distinctUntilChanged(), debounceTime(this.debouncetime), switchMap((reportObjectProperties: ReportObjectProperties) => this.state.selectedRegistryObjects$.pipe( take(1), map(selectedObjects => { return { selectedObjects, reportObjectProperties, }; }) ) ), ) .subscribe(({ selectedObjects, reportObjectProperties }) => this.applyChanges(selectedObjects, reportObjectProperties));
改动说明
- 移除了原逻辑冗余的
combineLatest嵌套,避免内部流变更自动触发下游推送 - 新增的
take(1)作用是:每次外部objectsPropertiesChanges$推送新值时,仅获取一次this.state.selectedRegistryObjects$的当前最新值,取值完成后直接结束当前内部流,不会再响应内部流后续的变更,完全满足仅外部流变更才向下传递数据的需求。
如果你的this.state.selectedRegistryObjects$是带初始值的BehaviorSubject/ReplaySubject(大部分状态管理类的可观察对象都属于这类),这个方案可以直接运行无需额外调整。
内容的提问来源于stack exchange,提问作者user16382159
相关产品推荐
相关产品推荐

