RxJS: comment ne pas souscrire à la valeur initiale et / ou indéfini?

Étant nouveau sur RxJS, je crée souvent un sujet qui contient des valeurs dans le futur, mais qui est initialement undefined. Cela ne peut être que undefined la première fois. J'utilise actuellement un filter sauter undefined valeurs, mais c'est assez lourd comme je le fais partout, comme j'ai besoin qu'une seule fois. (Peut-être que je fais quelque chose de mal ici?) Puis-je m'abonner à {[5] } seulement après avoir 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
});
24
demandé sur Pipo 2015-02-04 09:31:37

4 réponses

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

30
répondu Brandon 2015-02-04 08:58:27

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

var mySubject = new Rx.BehaviorSubject(undefined);

mySubject.skip(1).subscribe(function(value) {
  // do something with the value
});
10
répondu lwohlhart 2017-07-03 11:16:35

Pour l'instant, je suis en utilisant le filter opérateur, 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
répondu danguilherme 2018-03-16 19:59:17

mySubject.pipe( skipWhile( v => !v ) );

0
répondu Billy 2018-03-23 11:35:37