Comment utiliser RxJs distinctUntilChanged?
Je suis arriver a commencé avec RxJs (à l'aide de la v5 beta), mais de toute façon je ne peux pas comprendre comment travailler avec distinctUntilChanged
. La sortie à partir du code ci-dessous si je le lance dans babel-nœud est
[ 'a', 1 ]
{ key: 'a', state: 1 }
Next: { value: 42 }
Completed
Qui n'est pas ce que je m'attends. Pourquoi est-ce qu'une entrée en passant distinctUntilChanged
? J'attendrais la sortie de la
[ 'a', 1 ]
[ 'a', 0 ]
[ 'a', 1 ]
{ key: 'a', state: 1 }
{ key: 'a', state: 2 }
{ key: 'a', state: 0 }
{ key: 'a', state: 1 }
Next: { value: 42 }
Next: { value: 24 }
Completed
Voici le code
import {Observable} from 'rxjs'
Observable.of(['a', 1], ['a', 1], ['a', 0], ['a', 1])
.distinctUntilChanged(x => x[1])
.subscribe(x => console.log(x))
Observable.of({key: 'a', state: 1}, {key: 'a', state: 2}, {key: 'a', state: 0}, {key: 'a', state: 1})
.distinctUntilChanged(x => x.state)
.subscribe(x => console.log(x))
Observable.of({value: 42}, {value: 42}, {value: 24}, {value: 24})
.distinctUntilChanged(x => x.value)
.subscribe(
function (x) {
console.log('Next: ', x)
},
function (err) {
console.log('Error: ' + err)
},
function () {
console.log('Completed')
}
)
La liens dans la v5 docs pour ces fonctions semblent être morts
------ edit -----
Supplémentaire de débogage:
Observable.of(['a', 1], ['a', 1], ['a', 0], ['a', 1])
.do(x => console.log('before', x))
.distinctUntilChanged(x => x[1])
.do(x => console.log('after', x))
.subscribe(x => console.log(x))
de sortie:
before [ 'a', 1 ]
after [ 'a', 1 ]
[ 'a', 1 ]
before [ 'a', 1 ]
before [ 'a', 0 ]
before [ 'a', 1 ]
- Aussi, pour ce genre de débogage question, vous devez inclure le comportement attendu et, idéalement, de montrer quelques tentatives de débogage.
- OK j'ai ajouté de la sortie attendue de
Vous devez vous connecter pour publier un commentaire.
J'ai obtenu une réponse ici. Fondamentalement, la signature de la fonction modifié à partir de (sélecteur à clé, comparateur) à (comparateur, sélecteur à clé).
C'est de cette façon que l'exemple est fait en v5:
Ici est un exemple avec votre code est Rxjs V4. Vous verrez qu'il fonctionne correctement.
De sorte qu'il semble être quelque chose avec la nouvelle version bêta. Ici sont les spécifications pour distinctUntilChanged. L'opérateur lui-même semble être au travail comme dans la version 4.
De tester des choses, je vous recommande de trace de la sortie de chaque fonction par l'insertion d'une
.do(function(x){console.log(x)})
entre les opérateurs. Je ne peux que penser à laof
opérateur peut-être en passant uniquement sur le dernier élément du tableau.Observable.from
au lieu deObservable.of
(mettez tous vos tableaux dans un tableau tout de même)? Vous pouvez également essayer la même chose avecof
mais le changement'a', 1
à'b', 1
. Il sembleof
opérateur prend soit seulement le dernier ou le premier argument que vous lui transmettez.