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

130
Vistas
¿Debería estar completando mi tema después de seguir en angular ngOnDestroy?

Usualmente uso takeUntil(this.destroySub) cuando necesito suscribirme manualmente a una transmisión en mis componentes. ¿Importa (para el tema (recolección de basura o lo que sea), ya que el siguiente es suficiente para completar la transmisión) si completo el tema o no en ngOnDestroy ?

 @Component({...}) class MyComponent { private destroySub = new Subject<void>(); constructor() { of('some stream').pipe( takeUntil(this.destroySub) ).subscribe() } ngOnDestroy():void { this.destroySub.next(); this.destroySub.complete(); } }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Respuesta corta.

takeUntil(this.destroySub) es cómo está completando todos los demás observables en su componente, pero esto no completa this.destroySub en sí.

Sí, las asignaturas no tienen una duración limitada, por lo que debe completarlas cuando ya no las necesite.

La respuesta más larga

Al igual que cualquier otro objeto, el GC aún recopilará un Subject una vez que no haya más punteros hacia él. El problema con esta forma de pensar es que es muy fácil filtrar accidentalmente una referencia a este tema. Debido a que es una biblioteca asíncrona, las referencias pueden estar tanto en la pila actual como en el bucle de eventos.

Está trabajando dentro de un marco que puede intentar optimizar sus componentes, por lo que no hay garantía de que la referencia a su componente se elimine dentro de Angular después de llamar a ngOnDestroy. También está pasando referencias a la biblioteca RxJS cada vez que usa takeUntil(this.destroySub) . RxJS actúa como proxy y administra las emisiones por usted en muchos casos, por lo que es posible que se sorprenda con una línea de código relativamente mundana que causa una pérdida de memoria.

Completar un observable limpia toda la instrumentación interna que guarda RxJS para cualquier observable dado y deja tu conciencia clara en ese sentido.

Entonces, sí, aunque (si tiene cuidado y está bien informado) el GC puede limpiar un observable incompleto, no contaría con eso. Si su observable no es finito, entonces hágalo finito de alguna manera. this.destroySub.complete(); Eso funciona para ti.

over 4 years ago · Santiago Trujillo 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