También:
combineLatest (...) ejecuta observables en secuencia, uno por uno
combineLatest
utiliza internamente concat
, lo que significa que se debe obtener un valor para cada observable en la matriz antes de pasar al siguiente.
// partial source of static combineLatest (uses the rxjs/operators combineLatest internally):
// If you're using typescript then the output array will be strongly typed based on type inference
return function (source) { return source.lift.call(from_1.from([source].concat(observables)),
new combineLatest_1.CombineLatestOperator(project)); };
forkJoin (...) ejecuta observables en paralelo, al mismo tiempo
Si tiene 3 observables de origen, y cada uno de ellos tarda 5 segundos en ejecutarse, entonces tardará 15 segundos combineLatest
en ejecutarse. Mientras forkJoin
que se ejecutan en paralelo, tomará 5 segundos.
Por lo forkJoin
tanto, funciona más bien Promise.all(...)
cuando la orden no se aplica.
Consideración para el manejo de errores:
Si alguno de los errores observables sale, combineLatest
los siguientes no se ejecutarán, pero forkJoin
todos se están ejecutando. Por tanto, combineLatest
puede ser útil ejecutar una 'secuencia' de observables y recopilar el resultado en su conjunto.
Nota avanzada: si los observables de origen ya se están 'ejecutando' (suscritos por algo más) y los está usando share
, entonces no verá este comportamiento.
Nota aún más avanzada: CombineLatest siempre le dará lo último de cada fuente, por lo que si uno de los observables de la fuente emite varios valores, obtendrá el último. No solo obtiene un valor único para cada fuente y pasa a la siguiente. Si necesita asegurarse de obtener solo el 'próximo elemento disponible' para cada fuente observable, puede agregar .pipe(take(1))
a la fuente observable a medida que lo agrega a la matriz de entrada.
combineLatest()
yforkJoin()
que crean un observable. Hacen lo mismo, pero la sintaxis es diferente. No confundacombineLatest
derxjs/operators
cuál es un operador 'pipeable'. Si importa el incorrecto, obtendrá errores.