![](/img/trans.png)
[英]Rxjs - How to call two httpService after combinelatest?
[英]Why Rxjs combineLatest depends on both subscription and not call when one of them changed?
其中之一是搜索輸入,另一個是選擇過濾器。 當其中一個或兩個都發生變化時,我想改變結果。 我使用 Rxjs combineLatest 所以當它們或搜索輸入發生變化時,一切正常,但是當首先更改合作伙伴類型時,響應沒有改變。
ngOnInit() {
super.ngOnInit();
this.getAllPartners();
combineLatest([this.searchPartnerFc.valueChanges, this.filterFc.valueChanges])
.pipe(
switchMap(([search, filter]) => {
let partnersBySearch = this.getSearchResult(search);
let partnersByFilter = this.getFilterResult(filter);
this.partners = partnersBySearch.filter(item => partnersByFilter.indexOf(item) > 0);
return this.partners;
}),
)
.subscribe();
}
getFilterResult(filterKey: string) {
if (filterKey == 'All') return this.allPartners;
else return this.allPartners.filter(partner => partner.partnerType == filterKey);
}
getSearchResult(searchString: string) {
return this.allPartners.filter(x => x.partnerName.toLowerCase().includes(searchString));
}
我認為由於combineLatest
運算符的性質,它不起作用。 只有當兩個可觀察對象都首先發出初始值時,它才會發出。 因此,當只有第一個 observable 發出而第二個沒有發出時,它不會做任何事情: https://www.learnrxjs.io/learn-rxjs/operators/combination/combinelatest
我認為您在這里需要一個合並運算符:https://www.learnrxjs.io/learn-rxjs/operators/combination/merge
還請在此線程上查看: 如何在 RxJS 中“等待”兩個可觀察對象
您可以通過使用startWith
為每個源 observables 提供默認發射來實現您想要的結果:
combineLatest([
this.searchPartnerFc.valueChanges.pipe(startWith('')),
this.filterFc.valueChanges.pipe(startWith('All'))
]).pipe(
...
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.