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

162
Vistas
RxJs: actualizar observables dentro de una suscripción correctamente

Me preguntaba cómo actualizar un observable dentro de una suscripción sin desencadenar muchos eventos.

En este ejemplo, me suscribo a area: Observable<Area> , si el área cambia, me gustaría actualizar el theme: Observable<Theme> . distinctUntilChanged() debería hacer que la suscripción solo se active si el valor ha cambiado, pero cada vez que se actualiza el area , la cantidad de actualizaciones de theme aumenta en uno.

 observeArea(): void { this.area .pipe(distinctUntilChanged()) .subscribe(area => { this.themeService.updateTheme({primaryColor: area.color}); // should happen only once per area change }) }

¿Hay alguna forma "correcta" de hacer esto, sin desencadenar interminables actualizaciones de temas?

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

0

Creo que el problema podría estar en la forma en que está actualizando el tema.

Si está intentando actualizar el tema llamando al método observeArea() .

Cada vez que llame al método, se creará una nueva suscripción. El evento se pasará a cada suscripción. Entonces, cada vez que llame al método, una suscripción aumentará.

Solución

  1. Usar una tubería async
 area$!: Observable<any>; observeArea(): void { this.area$ = this.area .pipe( distinctUntilChanged(), tap(area => this.themeService.updateTheme({primaryColor: area.color});) ) }

y en el area$ | async para suscribirse. ejemplo:

 <ng-container *ngIf="area$ | async">...</ng-container>
  1. De lo contrario, debe darse de baja cada vez que se complete su suscripción
 observeArea(): void { const sub = this.area .pipe(distinctUntilChanged()) .subscribe(area => { this.themeService.updateTheme({primaryColor: area.color}); sub.unsubscribe(); }) }

Es mejor usar tubería async .

Creo que esto resuelve tu problema.

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