defaultIfEmpty<T, R>(defaultValue: R = null): OperatorFunction<T, T | R>
| defaultValue | Opcional. El valor por defecto es null.
El valor por defecto utilizado en el caso de que el Observable esté vacío. |
OperatorFunction<T, T | R>: Un Observable que puede emitir el valor por defecto especificado si el Observable fuente no emite ningún valor, o los valores emitidos por el Observable fuente.
Si el Observable fuente está vacío, este operador emitirá un valor por defecto.
defaultIfEmpty emite los valores emitidos por el Observable fuente o un valor por defecto en el caso de que el Observable fuente esté vacío (se completa sin haber emitido ningún valor next.)
Como el Observable está vacío, se emitirá el valor por defecto
import { defaultIfEmpty } from "rxjs/operators";
import { EMPTY } from "rxjs";
const empty$ = EMPTY;
empty$.pipe(defaultIfEmpty("La respuesta es 42")).subscribe(console.log);
// Salida: La respuesta es 42
Si no se presiona ninguna tecla en 4 segundos, se emitirá el valor de la tecla por defecto
import { defaultIfEmpty, map, takeUntil } from "rxjs/operators";
import { fromEvent, timer } from "rxjs";
const defaultKey = "Space";
const key$ = fromEvent<KeyboardEvent>(document, "keydown").pipe(
map(({ code }) => code),
takeUntil(timer(4000))
);
key$.pipe(defaultIfEmpty(defaultKey)).subscribe(console.log);
// Salida: (4s) Space
Si en 5 segundos no se hace ningún click, se emitirá el mensaje "Ningún click"
import { fromEvent } from "rxjs";
import { defaultIfEmpty, takeUntil } from "rxjs/operators";
const clicks = fromEvent(document, "click");
const clicksBeforeFive = clicks.pipe(takeUntil(interval(5000)));
const result = clicksBeforeFive.pipe(defaultIfEmpty("Ningún click"));
result.subscribe((x) => console.log(x));
Documentación oficial en inglés