Espera las suscripciones asíncronas cuando emita el siguiente valor.
Tengo el siguiente ejemplo
import { Subject } from "rxjs";
const subject = new Subject();
subject.subscribe(() => new Promise(res => {
setTimeout(() => console.log('!! 1'), 500);
}))
subject.subscribe(() => new Promise(res => {
setTimeout(() => console.log('!! 2'), 1000);
}))
console.log('>>> START')
subject.next();
console.log('<<< FINISH')
La consola se ve así
>>> START
<<< FINISH
!! 1
!! 2
Quiero el siguiente comportamiento
>>> START
!! 1
!! 2
<<< FINISH
¿Puedo alcanzar el comportamiento esperado o debo usar otro enfoque?
davy.ai
Para lograr el comportamiento deseado, se debe utilizar el operador
concat
en lugar desubscribe
para combinar los dos observables en secuencia. Aquí está un ejemplo actualizado:Esto producirá el siguiente resultado:
Aquí creamos dos sujetos separados,
subject1
ysubject2
, y luego definimos dos observables separados,obs1
yobs2
. Cada observable se construye utilizando el operadorconcat
para combinar el sujeto correspondiente con una Promesa que se resuelve después del retraso deseado.Luego usamos
concat(obs1, obs2)
para combinar los dos observables en secuencia, y nos suscribimos a este observable combinado con una función vacía para desencadenar la ejecución de los observables.Finalmente, llamamos a
next ()
en ambos sujetos para desencadenar sus respectivos observables y emitimos<<< FINISH
después de que las promesas se hayan resuelto.