【发布时间】:2022-03-12 16:59:35
【问题描述】:
我有一个对象流,我需要比较当前对象是否与前一个对象不同,在这种情况下会发出一个新值。我发现 distinctUntilChanged 操作符应该完全符合我的要求,但由于某种原因,它永远不会发出除第一个值之外的值。如果我删除 distinctUntilChanged 值会正常发出。
我的代码:
export class SettingsPage {
static get parameters() {
return [[NavController], [UserProvider]];
}
constructor(nav, user) {
this.nav = nav;
this._user = user;
this.typeChangeStream = new Subject();
this.notifications = {};
}
ngOnInit() {
this.typeChangeStream
.map(x => {console.log('value on way to distinct', x); return x;})
.distinctUntilChanged(x => JSON.stringify(x))
.subscribe(settings => {
console.log('typeChangeStream', settings);
this._user.setNotificationSettings(settings);
});
}
toggleType() {
this.typeChangeStream.next({
"sound": true,
"vibrate": false,
"badge": false,
"types": {
"newDeals": true,
"nearDeals": true,
"tematicDeals": false,
"infoWarnings": false,
"expireDeals": true
}
});
}
emitDifferent() {
this.typeChangeStream.next({
"sound": false,
"vibrate": false,
"badge": false,
"types": {
"newDeals": false,
"nearDeals": false,
"tematicDeals": false,
"infoWarnings": false,
"expireDeals": false
}
});
}
}
【问题讨论】:
-
typeChangeStream是 Observable 吗?如果不查看创建该 / 的代码,很难判断出了什么问题。 -
请查看stackoverflow.com/help/mcve 以获取处理“它不起作用”问题的指南。基本上发布一个重现错误的最小可验证示例,并发布预期的行为以及它与当前行为的不同之处。谈论 JSON 字符串化你需要知道它不是检查对象相等性的防弹方法。 {"a" : 2, "b":1} 例如与 {"b":1, "a":2} 不同,但它们是相同的对象
-
抱歉,我添加了更多代码。我不需要防弹对象相等性检查,我确信在这种情况下对象将是每次我相同的订单。
-
你解决了这个问题吗?我对 BehaviorSubject 有同样的看法,它发出 prev 和 curr 相同的结果,wtf ..
-
@DanielSuchý IMO 接受对您有用的答案会很好
标签: angular reactive-programming rxjs