MonoTypeOperatorFunction<T>: Un Observable que puede emitir un único valor del Observable fuente que cumpla la condición, o undefined si ninguno la cumple.
Lamza
EmptyError Lanza un EmptyError si el Observable se completa sin emitir ninguna notificación next.
Descripción
Es como first, pero emite un error si hay más de un valor.
Retorna un Observable que emite el único valor emitido por el Observable fuente que cumpla la condición especificada, en el caso de que exista dicho valor. Si el Observable fuente emite más de un elemento que cumpla la condición, o no emite ningún elemento, se lanzarán un IllegalArgumentException o un NoSuchElementException respectivamente.
Si el Observable fuente emite elementos, pero ninguno cumple la condición especificada, se emitirá undefined.
import { range } from"rxjs";import { single } from"rxjs/operators";constnumber$=range(1,5);number$.pipe(single((n) => n %2===0)).subscribe(console.log,console.error);// Salida: (error) Sequence contains more than one element
Si no hay ningún elemento que cumpla la condición, se emitirá undefined
import { of } from"rxjs";import { single } from"rxjs/operators";constuser$=of( { name:"NyaGarcía", age:23 }, { name:"zaldih", age:21 }, { name:"caballerog", age:35 });user$.pipe(single(({ age }) => age <18)).subscribe(console.log);// Salida: undefined
Ejemplos de la documentación oficial
Emitir 'Error'
import { range } from"rxjs";import { single } from"rxjs/operators";constnumbers=range(1,5).pipe(single());numbers.subscribe( (x) =>console.log("Nunca se llamará"), (e) =>console.log("Error"));// Salida// 'Error'
Emitir 'undefined'
import { range } from"rxjs";import { single } from"rxjs/operators";constnumbers=range(1,5).pipe(single((x) => x ===10));numbers.subscribe((x) =>console.log(x));// Salida// 'undefined'