RxJS - Multidiffusion opérateur multicast

Un opérateur de multidiffusion partage l'abonnement unique créé avec d'autres abonnés. Les paramètres pris en charge par la multidiffusion sont un sujet ou une méthode de fabrique qui renvoie un ConnectableObservable qui doit la méthode connect (). Pour vous abonner, la méthode connect () doit être appelée.

Syntaxe

multicast(subjectOrSubjectFactory: Subject): OperatorFunction

Paramètres

subjectOrSubjectFactory: le paramètre passé à la multidiffusion est un sujet ou une méthode de fabrique qui renvoie un sujet.

Avant d'entrer dans le fonctionnement d'un opérateur multicast (), voyons d'abord comment l'opérateur multicast () est utile.

Considérez l'exemple suivant d'une observable simple avec abonnement -

Exemple

import { Observable } from 'rxjs';

var observable = new Observable(function subscribe(subscriber) {
   try {
      subscriber.next(Math.random());
   } catch (e) {
      subscriber.error(e);
   }
});
const subscribe_one = observable.subscribe(val => console.log(
   "Value from Sub1 = "+val)
);
const subscribe_two = observable.subscribe(val => console.log(
   "Value from Sub2 = "+val)
);

Production

Si vous voyez la sortie, les valeurs de Sub1 et Sub2 sont différentes. En effet, lorsque l'abonné est appelé, l'observable redémarre et donne la nouvelle valeur disponible. Mais nous avons besoin que les abonnés appelés aient la même valeur.

Ici, nous avons l'opérateur multicast () pour nous aider.

Exemple

import { Observable,Subject } from 'rxjs';
import { take, multicast, mapTo } from 'rxjs/operators';

var observable = new Observable(function subscribe(subscriber) {
   try {
      subscriber.next(Math.random());
   } catch (e) {
      subscriber.error(e);
   }
});
const multi_op = observable.pipe(multicast(() => new Subject()));
const subscribe_one = multi_op.subscribe(
   x => console.log("Value from Sub1 = "+x)
);
const subscribe_two = multi_op.subscribe(
   x => console.log("Value from Sub2 = "+x)
);
multi_op.connect();

Si vous voyez maintenant la même valeur est partagée entre les abonnés qui sont appelés.

Production