RxJS - Multicasting Operator multicast
Un operatore multicast condivide il singolo abbonamento creato con altri abbonati. Il parametro che multicast accetta è un oggetto o un metodo di fabbrica che restituisce un metodo ConnectableObservable che deve connect (). Per iscriversi, è necessario chiamare il metodo connect ().
Sintassi
multicast(subjectOrSubjectFactory: Subject): OperatorFunction
Params
subjectOrSubjectFactory: il parametro passato a multicast è un subject o un metodo factory che restituisce un subject.
Prima di entrare nel funzionamento di un operatore multicast (), dobbiamo prima capire come è utile l'operatore multicast ().
Considera il seguente esempio di un semplice osservabile con abbonamento:
Esempio
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)
);
Produzione
Se vedi l'output, i valori per Sub1 e Sub2 sono diversi. Questo perché quando l'abbonato viene chiamato l'osservabile si riavvia e fornisce il nuovo valore disponibile. Ma abbiamo bisogno che gli abbonati vengano chiamati per avere lo stesso valore.
Qui, abbiamo l'operatore multicast () per aiutarci con esso.
Esempio
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();
Se ora vedi lo stesso valore è condiviso tra gli iscritti che vengono chiamati.