Este es el código de muestra que usa el operador rxjs , quiero imprimir/obtener el penúltimo valor.
mecanografiado
import { from } from 'rxjs'; import { map, last } from 'rxjs/operators'; //emit (1,2,3,4,5) const source = from([1, 2, 3, 4, 5]); //add 10 to each value const example = source.pipe(map(val => val + 10)).pipe(last()); //output: 11,12,13,14,15 const subscribe = example.subscribe(val => console.log(val)); Actualmente imprime 15 pero quiero que imprima 14 en su lugar.
Puede utilizar el operador takeLast() y skipLast RxJS.
El operador takeLast() le permite
Emite solo los últimos valores de
countemitidos por el Observable de origen.
mientras que el operador skipLast()
Omita los últimos valores de
countemitidos por la fuente Observable.
Ahora, podemos combinar ambos operadores pipeables de modo que tomaremos los últimos 2 conteos y omitiremos el último conteo.
import { range, from } from 'rxjs'; import { takeLast, map, skipLast} from 'rxjs/operators'; const source = from([1, 2, 3, 4, 5]); const example = source .pipe( map(val => val + 10), takeLast(2), skipLast(1) ); example.subscribe(res => console.log(res));Aquí hay una demostración .
Puede usar el operador por pares: https://www.learnrxjs.io/operators/combination/pairwise.html
import { from } from 'rxjs'; import { map,last } from 'rxjs/operators'; //emit (1,2,3,4,5) const source = from([1, 2, 3, 4, 5]); //add 10 to each value const example = source.pipe(map(val => val + 10)).pipe(pairwise(),last()); //output: 11,12,13,14,15 const subscribe = example.subscribe(val => console.log(val[0]));takeLast toma los últimos n valores emitidos antes de completarse
take tomará el primer número n
import { from } from "rxjs"; import { take, takeLast } from "rxjs/operators"; const source = from([1,2,3,4,5]); source .pipe( takeLast(2), take(1) ) .subscribe(console.log);