web-dev-qa-db-fra.com

Comment convertir un Observable en ReplaySubject?

Voici ce que je fais maintenant pour convertir un Observable en ReplaySubject:

const subject = new Rx.ReplaySubject(1);

observable.subscribe(e => subject.next(e));

Est-ce la meilleure façon de faire la conversion, ou existe-t-il une manière plus idiomatique?

15
Misha Moroshko

Vous pouvez utiliser simplement observable.subscribe(subject) si vous souhaitez passer les 3 types de notifications, car un sujet se comporte déjà comme un observateur. Par exemple:

let subject = new ReplaySubject();
subject.subscribe(
  val => console.log(val),
  undefined, 
  () => console.log('completed')
);

Observable
  .interval(500)
  .take(5)
  .subscribe(subject);

setTimeout(() => {
  subject.next('Hello');
}, 1000)

Voir la démo en direct: https://jsbin.com/bayewo/2/edit?js,console

Cependant, cela a une conséquence importante. Puisque vous êtes déjà abonné à la source Observable, vous l'avez fait passer de "froid" à "chaud" (peut-être que cela n'a pas d'importance dans votre cas d'utilisation).

17
martin