publish

Retorna un ConnectableObservable, que es un Observable que espera a que se haga una llamada a su método `connect` antes de empezar a emitir valores a sus Observadores

💡 publish es equivalente a multicast(() => new Subject())

chevron-rightSignaturahashtag

Firma

publish<T, R>(selector?: OperatorFunction<T, R>): MonoTypeOperatorFunction<T> | OperatorFunction<T, R>

Parámetros

Retorna

MonoTypeOperatorFunction<T> | OperatorFunction<T, R>: Un ConnectableObservable que, cuando se hace una llamada a su método connect, hace que el Observable fuente emita valores a sus Observadores.

Descripción

Convierte un Observable frío en un Observable caliente, utilizando el operador multicastarrow-up-right junto a un Sujeto internamente.

Diagrama de canicas del operador publish

Retorna un ConnectableObservable, que es un Observable que espera a que se haga una llamada a su método connect antes de empezar a emitir valores a sus Observadores. En el caso de que no se llame a connect, el Observable fuente no emitirá ningún valor.

💡 Para evitar tener que llamar a connect manualmente, se puede utilizar el operador refCountarrow-up-right.

Ejemplos

Compartir el Observable fuente con publish

StackBlitzarrow-up-right

import { ConnectableObservable, interval, timer } from "rxjs";
import { publish, tap, take } from "rxjs/operators";

// number$ no empezará a emitir valores hasta que se haga una llamada a connect
const number$ = interval(1000).pipe(take(4));

const multicasted$ = number$.pipe(
  tap(() =>
    console.log("Fuente compartida, efecto secundario se ejecuta una sola vez")
  ),
  publish()
) as ConnectableObservable<number>;

// Llamando a connect tras 3 seconds
timer(3000)
  .pipe(tap(() => multicasted$.connect()))
  .subscribe();

multicasted$.subscribe((val) => console.log(`Observador 1: ${val}`));
multicasted$.subscribe((val) => console.log(`Observador 2: ${val}`));

/* Salida:
Fuente compartida, efecto secundario se ejecuta una sola vez,
Observador 1: 0,
Observador 2: 0,
(1s)
Fuente compartida, efecto secundario se ejecuta una sola vez,
Observador 1: 1,
Observador 2: 1,
...
*/

Ejemplos de la documentación oficial

Convertir al Observable fuente en caliente, unir cada Observable interno en uno solo y suscribirse al Observable resultante

chevron-rightSobrecargashashtag

Firma

publish(): UnaryFunction<Observable<T>, ConnectableObservable<T>>

Parámetros

No recibe ningún parámetro.

Retorna

UnaryFunction<Observable<T>, ConnectableObservable<T>>

Firma

publish(selector: (shared: Observable<T>) => O): OperatorFunction<T, ObservedValueOf<O>>

Parámetros

Retorna

OperatorFunction<T, ObservedValueOf<O>>

Firma

publish(selector: MonoTypeOperatorFunction<T>): MonoTypeOperatorFunction<T>

Parámetros

Retorna

MonoTypeOperatorFunction<T>

Recursos adicionales

Source codearrow-up-right

Documentación oficial en inglésarrow-up-right

Last updated