Este es un ejemplo un poco enrevesado, pero me preguntaba cómo hacer lo siguiente en RxJs: después de cierta parte de la canalización, vuelva a introducir el valor en una parte anterior de la canalización, para que se procese nuevamente.
of(1, 2, 3, 4, 5).pipe( map(x => x + 1), map(x => x + 1), filter(x => x % 2), // refeed after the first map but before the second )Aquí hay un ejemplo de cómo puede usar expandir para hacer esto:
function isEven(x) { return x % 2 == 0 } of(1, 2, 3, 4, 5).pipe( map(x => x + 1), expand(x => of(x).pipe( map(x => x + 1), filter(isEven) )) );Así es como podrías escribir una función recursiva para hacer esto:
function isEven(x) { return x % 2 == 0 } function loopBack(x : number) { return of(x).pipe( map(x => x + 1), filter(isEven), mergeMap(loopBack), startWith(x) ); } of(1, 2, 3, 4, 5).pipe( map(x => x + 1), mergeMap(loopBack), );