我希望检测CombinedLatest Observable中的新变化。两个原始的Observable流都是长寿的,我想检测更改是否添加了一个新项,或者删除了CombinedLatest Observable中的一个项,但我不确定如何将新的combinedLatest可观察值与改变前的旧的。
this.friendsOnMap$ = combineLatest(this.friendsOnlyPeople$, this.friends$)
.pipe(map(([friendsOnlyPeople, friends]) => friendsOnlyPeople
.map(this.checkIfFriend(friends))))
.map(friend => {
return friend.filter(friend => friend.isFriend == true);
})
.subscribe(friends => {
console.log('Combined$ ', friends)
});
目前,每次Observable更改时都会运行console.log('Combined$ ', friends)
。但是我想只在添加或删除新项目时运行它。
答案 0 :(得分:0)
如果没有添加或删除任何朋友,您可以使用distinctUntilChanged并传递自定义compare
函数来实现此目的...在您的情况下返回true
:
this.friendsOnMap$ = combineLatest(this.friendsOnlyPeople$, this.friends$).pipe(
map(([friendsOnlyPeople, friends]) => friendsOnlyPeople.map(this.checkIfFriend(friends))),
map((friends: Friend[]) => friends.filter(friend => friend.isFriend == true)),
distinctUntilChanged((p: Friend[], q: Friend[]) => {
// return true if p and q are the same set of identities
...
})
).subscribe(friends => {
console.log('Combined$ ', friends)
});