Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

386
Vistas
RxJS: ¿Cómo retrasar el próximo valor emitido?

Tengo la función asíncrona handleParamsChanges que puede tardar unos segundos en resolverse. Y lo llamo cuando observable emite valor:

 this._activatedRoute.params .subscribe(params => { this.handleParamsChanges(params).then(() => { // new value can be processed now }); });

¿Cómo podría modificar mi código para que si observable emita 2 valores uno tras otro, primero se llame a handleParamsChanges para el primer valor, y solo después de que se resuelva esta promesa, se llame con el segundo valor, y así sucesivamente?

Editar:

Aquí está la solución que se me ocurrió, pero supongo que hay una mejor manera de hacerlo:

 const params$ = this._activatedRoute.params; const canExecute$ = new BehaviorSubject(true); combineLatest(params$, canExecute$) .pipe( filter(([_, canExecute]) => canExecute), map(([params]) => params), distinctUntilChanged() ) .subscribe(async params => { canExecute$.next(false); try { await this.handleParamsChanges(params); } catch (e) { console.log(e); } finally { canExecute$.next(true); } })

Estoy usando canExecute$ para retrasar el procesamiento del nuevo valor.

Necesito usar distinctUntilChanged aquí para evitar crear un bucle infinito.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Lo que estás buscando es concatMap . Espera a que se complete el "observable interno" anterior antes de volver a suscribirse. También puede simplificar enormemente su tubería:

 params$.pipe( concatMap(params => this.handleParamsChanges(params)), ).subscribe()
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda