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.