オブジェクトのストリームがあり、現在のオブジェクトが以前と同じでない場合は比較する必要があり、この場合は新しい値を出力します。私はdistinctUntilChanged演算子が私が欲しいものを正確に行うべきであることを発見しましたが、何らかの理由で、最初のものを除いて値を出力しません。私がdistinctUntilChangedを削除すると、値が正常に放出されます。RxJS distinctUntilChanged - オブジェクトcomparsion
マイコード:
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'は監視可能ですか?どのコードがそのコードを作成しているのか分からないと間違ったことを教えてください。 –
'それはうまくいかない'という質問に対処するためのガイドラインはhttp://stackoverflow.com/help/mcveをご覧ください。基本的に、エラーを再現し、予想される動作と、現在の動作とはどのように異なるかを投稿する、最小限の検証可能な例を投稿します。 JSONは、オブジェクトの等価性をチェックするための弾丸ではないメソッドであることを知っておく必要があります。これらのオブジェクトは同じですが、{"a":2、 "b":1}は例えば "b":1、 "a":2と異なるのです – user3743222
申し訳ありません、もっとコードを追加しました。私は弾丸証明のオブジェクトの平等チェックが必要ない、私はこの場合はオブジェクトが毎回私は同じ順序であると確信しています。 –