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
count
emitidos por el Observable de origen.
mientras que el operador skipLast()
Omita los últimos valores de
count
emitidos 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);