Operadores no tan comunes
- take: El take deja pasar el número de emisiones entre el parentesis ej:
take(2) y después se completa automáticamente.
- first: Deja pasar la primera emisión y después se completa. Puede ser empleado con una condición:
first(val => val >= 3) En este caso se completaria cuando la emisión fuera igual o superior a 3.
- takeWhile: Deja pasar los elementos mientras no se cumpla la condición establecida, cuando algun valor hace que se cumpla la condición, el observable se completa.
takeWhile(({ y }) => y <= 150, true) - El segundo argumento es el inclusive, si se manda un true, emitiría el valor que hizo que se completara el observable.
- takeUntil: Sigue emitiendo los valores hasta que el observable pasado como argumento recibe su primer valor:
const timer$ = interval(1000);
const clickBtn$ = fromEvent(button,'click');
timer$.pipe(
takeUntil(clickBtn$);
).subscribe(console.log)
// Tambien se puede usar en una sola línea de esta manera.
takeUntil(fromEvent(button,'click'));
- skip: Omite el numero de emisiones que se le han pasado como argumento.
skip(2). En este caso las 2 primeras emisiones del observable seran ignoradas, y empezara a emitir a partir del tercer valor.
- distinct: Omite una emisión repetida por un observable. Ej:
of(1,2,3,4,1,1,1,5,5) - De forma normal se recibirían todos los números, pero usando el distinct() solo se recibirían 1,2,3,4,5. Para usar el distinct() con propiedades de objetos se debe especificar la propiedad que quiero que sea "única": distinct(p => p.nombre)
- distinctUntilChanged: Omite una emisión si la anterior es exactamente igual a la actual. Ej:
of(1,1,3,3,2,2,4,4,5,3,1) - De forma normal se recibirían todos los números, pero usando el distinctUntilChanged() solo se recibirían 1,3,2,4,5,3,1. Para usar el distinctUntilChanged() con propiedades de objetos se debe especificar una función comparativa: distinctUntilChanged( (anterior, actual) => anterior.nombre === actual.nombre))
- distinctUntilKeyChanged: Escucha la propiedad de un objeto y omite la emisión si la anterior es exactamente igual a la actual
distinctUntilKeyChanged('nombre')