RxJS - multicast do operador de multicast

Um operador multicast compartilha a única assinatura criada com outros assinantes. Os parâmetros que o multicast assume é um assunto ou um método de fábrica que retorna um método ConnectableObservable que tem que conectar (). Para se inscrever, o método connect () deve ser chamado.

Sintaxe

multicast(subjectOrSubjectFactory: Subject): OperatorFunction

Params

subjectOrSubjectFactory: o parâmetro passado para multicast é um assunto ou método de fábrica que retorna um assunto.

Antes de entrarmos no trabalho de um operador multicast (), vamos primeiro entender como o operador multicast () é útil.

Considere o seguinte exemplo de um observável simples com assinatura -

Exemplo

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)
);

Resultado

Se você vir a saída, os valores de Sub1 e Sub2 são diferentes. Isso ocorre porque quando o assinante é chamado, o observável reinicia e fornece o valor atualizado disponível. Mas precisamos que os assinantes sendo chamados tenham o mesmo valor.

Aqui, temos o operador multicast () para nos ajudar com isso.

Exemplo

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 você agora vê que o mesmo valor é compartilhado entre os assinantes que são chamados.

Resultado