example angular rxjs

angular - example - rxjs pipe



Promise.all() con RxJS (4)

Como señaló @Eric Martinez, hay forkJoin . forkJoin ejecuta todas las secuencias observables en paralelo y recoge sus últimos elementos.

Rx.Observable.forkJoin([a,b]).subscribe(t=> { var firstResult = t[0]; var secondResult = t[1]; });

Estoy escribiendo una aplicación en Angular 2 y quiero ejecutar varias solicitudes http y ejecutar una función en las respuestas.

En Angular 1, escribiría algo como $q.all([$http.get(...), $http.get(...), ...]).then(doSomethingWithResponses);

Pero Angular 2 devuelve RxJS Observables y después de un montón de lecturas todavía no puedo entender cómo obtener las respuestas de varias solicitudes http. ¿Cómo puede hacerse esto?


No estoy seguro de que quiera usar forkJoin/zip , especialmente considerando que combineLatest es más fácil de entender y emitirá en cada evento secundario, mientras que forkJoin básicamente muestrea en cada forkJoin que ha emitido.

Esto podría llegar a morderte más tarde cuando quieras combinar los Observables de múltiples ítems más adelante.


Estoy aprendiendo RxJS y estaba tratando de hacer lo mismo con RxJS v5

Parece que ya no tenemos forkJoin en v5, así es como lo hice funcionar (funciona con flatMap o mergeMap , que son alias):

const callOne = value => new window.Promise(resolve => setTimeout(() => resolve(value + 10), 3000) ); const callTwo = value => new window.Promise(resolve => setTimeout(() => resolve(value + 20), 1000) ); Rx.Observable .of(2) .do(() => console.log(''querying...'')) .mergeMap(number => Rx.Observable.zip( Rx.Observable.fromPromise(callOne(number)), Rx.Observable.fromPromise(callTwo(number)) ) ).concatAll() .subscribe(createSubscriber(''promises in parallel''));


¿No funcionaría una merge ? Puede suscribirse y adjuntar un controlador a la onComplete llamada completa.

Primero construyo una matriz de mis observables y luego uso la merge estática:

let obs_ary: any = [obs1, obs2, obs3]; Observable.merge(...obs_ary);