我有一个带有 2 个输入(或 mor)的组件,我想:
- 当两个值都设置并存在时,第一次触发方法 X
- 如果两个值中的任何一个发生变化,则每次触发方法 X
<some-cmp [itemid]="activeItemId$ | async" [userId]="activeUserId$ | async"></some-cmp>
这两个值都可以随时更改,因此我认为使用rxjs
构建流可以让我控制一切。我目前的解决方案似乎有点老套,很难测试。我使用2BehaviourSubjects
和.combineLatest
debounceTime
@Input() set itemId (id){this.itemId$.next(id)};
@Input() set userId (id){this.userId$.next(id)};
itemId$ = new BehaviourSubject$(null);
userId$ = new BehaviourSubbject$(null);
ngOnInt(){
combineLatest([
this.itemId$.pipe(filter(item=>item!===null)),
this.userId$.pipe(filter(item=>item!===null))
]).pipe(
debounceTime(10),
switchMap(...)
).subscribe(...)
}
所以我的问题是
- 有没有更优雅的方式来实现这种行为?
- 有没有办法避免
debounceTime
,这使测试变得困难?
debounceTime
用于两个值同时到达并且我不想combineLatest
触发该方法两次的情况。