Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

140
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!