Convierte un Observable de orden superior en uno de primer orden aplicando combineLatest cuando el Observable de orden superior se completa
Signatura
combineAll<T, R>(project?: (...values: any[]) => R): OperatorFunction<T, R>
OperatorFunction<T, R>
combineAll
recibe un Observable de Observables y recoge todos los Observables que contenga. Una vez que el Observable externo se haya completado, se suscribe a todos los Observables recogidos y combina sus valores mediante la estrategia combineLatest
, de manera que:
- Cada vez que un Observable interno emite, el Observable resultante emite.
- Cuando el Observable retornado emite, emite todos los valores recientes de manera que:
- Si se proporciona una función
project
, se llama a dicha función con cada valor de cada Observable interno en el orden en el que llegaron, y el resultado de la función de proyección es lo que se emite en el Observable resultante. - Si no se proporciona una función
project
, el Observable resultante emite un array de todos los valores recientes.
- Si se proporciona una función
combineAll espera a recibir todos los valores, y los combina en un array
import { of } from "rxjs";
import { ajax } from "rxjs/ajax";
import { map, delay, combineAll } from "rxjs/operators";
const pokemonId$ = of(1, 5, 6);
function getPokemonName(id: number) {
return ajax.getJSON(`https://pokeapi.co/api/v2/pokemon/${id}`).pipe(
map(({ name }) => name),
delay(2000)
);
}
pokemonId$
.pipe(
map((id) => getPokemonName(id)),
combineAll()
)
.subscribe(console.log);
// Salida: (2s) ['bulbasaur', 'charmeleon', 'charizard']
Proyectar dos eventos click sobre un Observable intervalo, y aplicar combineAll
import { fromEvent, interval } from "rxjs";
import { map, combineAll, take } from "rxjs/operators";
const clicks = fromEvent(document, "click");
const higherOrder = clicks.pipe(
map((ev) => interval(Math.random() * 2000).pipe(take(3))),
take(2)
);
const result = higherOrder.pipe(combineAll());
result.subscribe((x) => console.log(x));
Sobrecargas
combineAll(): OperatorFunction<ObservableInput<T>, T[]>
No recibe ningún parámetro.
OperatorFunction<ObservableInput<T>, T[]>
combineAll(): OperatorFunction<any, T[]>
No recibe ningún parámetro.
OperatorFunction<any, T[]>
combineAll(project: (...values: T[]) => R): OperatorFunction<ObservableInput<T>, R>
OperatorFunction<ObservableInput<T>, R>
combineAll(project: (...values: any[]) => R): OperatorFunction<any, R>
OperatorFunction<any, R>