web-dev-qa-db-fra.com

RxJS: Comment ne pas s'abonner à la valeur initiale et/ou indéfinie?

Étant nouveau pour RxJS, je crée souvent un sujet qui conserve des valeurs à l’avenir, mais qui est initialement undefined. Cela ne peut être que undefined la première fois. J'utilise actuellement une variable filter pour ignorer les valeurs undefined, mais c'est assez fastidieux, car je le fais partout car je n'ai besoin que d'une fois. (Peut-être que je fais quelque chose de mal ici?) Puis-je en quelque sorte souscrire à mySubject uniquement après qu'il ait obtenu sa première valeur via onNext?

var mySubject = new Rx.BehaviorSubject(undefined);

mySubject.filter(function(value) {
  return value !== undefined;
}).subscribe(function(value) {
  // do something with the value
});
27
Pipo

Utilisez new Rx.ReplaySubject(1) au lieu de BehaviorSubject.

32
Brandon

Comme mentionné par Will , vous devriez pouvoir ignorer la première valeur en utilisant l'opérateur de saut: 

var mySubject = new Rx.BehaviorSubject(undefined);

mySubject.skip(1).subscribe(function(value) {
  // do something with the value
});
11
lwohlhart

Pour l'instant, j'utilise l'opérateur filter , mais je ne sais pas si c'est une bonne solution:

var mySubject = new Rx.BehaviorSubject().filter(x => !!x);

mySubject.subscribe(value => { /* will receive value from below */);

mySubject.next('value');

mySubject.subscribe(value => { /* also receives the value */ });
0
danguilherme