Ho flusso di oggetti e ho bisogno di confrontare se l'oggetto corrente non è uguale al precedente e in questo caso emettere un nuovo valore. Ho trovato che l'operatore distinctUntilChanged dovrebbe fare esattamente quello che voglio, ma per qualche ragione, non emette mai valore tranne il primo. Se rimuovo i valori distinctUntilChanged vengono emessi normalmente.RxJS distinctUntilChanged - compendio oggetto
Il mio codice:
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' è osservabile? Difficile dire cosa non va visto senza vedere quale codice sta creando quello/ecc. –
Si prega di dare un'occhiata a http://stackoverflow.com/help/mcve per le linee guida che trattano le domande "non funziona". In pratica, inserisci un esempio minimamente verificabile che riproduce l'errore e pubblica il comportamento previsto e come è diverso dal comportamento corrente. Parlare di stringere JSON è necessario sapere che non è un metodo a prova di proiettile per controllare l'uguaglianza degli oggetti. {"a": 2, "b": 1} è per esempio diverso da {"b": 1, "a": 2} mentre questi sono gli stessi oggetti – user3743222
Ci scusiamo per questo, ho aggiunto altro codice. Non ho bisogno di controllo di uguaglianza degli oggetti a prova di proiettile, sono sicuro che in questo caso l'oggetto sarà sempre lo stesso ordine. –