Promesa.todo el comportamiento con Observables RxJS?


En Angular 1.x A veces tendría que hacer varias solicitudes http y hacer algo con todas las respuestas. Lanzaría todas las promesas en una matriz y llamaría Promise.all(promises).then(function (results) {...}).

Las mejores prácticas de Angular 2 parecen apuntar hacia el uso de Observable de RxJS como un reemplazo de las promesas en las solicitudes http. Si tengo dos o más Observables diferentes creados a partir de solicitudes http, ¿es su equivalente a Promise.all()?

Author: user3743222, 2016-02-24

3 answers

La alternativa más sencilla para emular Promise.all es usar el operador forkJoin (inicia todos los observables en paralelo y une sus últimos elementos):

Un poco fuera de alcance, pero en caso de que ayude, en el tema de encadenar promesas, se puede utilizar un simple flatMap: Cf. RxJS Promise Composition (passing data)

 48
Author: user3743222,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:34

ForkJoin también funciona bien, pero preferiría combineLatest ya que no necesita preocuparse por tomar el último valor de observables. De esta manera, puede actualizarse siempre que cualquiera de ellos emita un nuevo valor también (por ejemplo, se obtiene en un intervalo o algo).

 6
Author: kakigoori,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-25 04:54:19

On reactivex.io forkJoin en realidad apunta a Zip , que hizo el trabajo por mí:

let subscription = Observable.zip(obs1, obs2, ...).subscribe(...);
 6
Author: Arnaud P,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-28 16:11:54