Как проверить наличие активных подписок на наблюдаемые, чтобы избежать утечек памяти в Angular - PullRequest
0 голосов
/ 07 января 2019

Я использую наблюдаемые для получения информации из разных источников через http. Я понимаю, что подпиской на эти наблюдаемые управляет Angular, поэтому в этой части существует низкий риск утечек памяти. Однако, может быть, я немного параноик, я использую оператор takeUntil (), чтобы гарантировать отписку от этих наблюдаемых. Кроме того, я планирую интенсивно использовать наблюдаемые в других задачах, таких как счетчики обнаружения событий. Поэтому я немного беспокоюсь об активных подписках, которые могут вызвать любую проблему.

Система, в которой я работаю, включает: Angular CLI: 7.1.4; Узел: 10.15.0; Угловой: 7.1.4; rxjs 6.3.3; машинопись 3.1.6; вебпак 4.23.1; Linux rdz1 4.15.0-43-generic # 46-Ubuntu SMP четверг, 6 декабря 14:45:28 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux

Компоненты имеют следующий код:

import { Component, OnInit, OnDestroy } from '@angular/core';
import { Observable, Subject} from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { QueryInvoiceService } from '../services/query-invoice.service';
import { RegInvoice } from '../classes/reg-invoice';

@Component({
  selector: 'app-detail-notes',
  templateUrl: './detail-notes.component.html',
  styleUrls: ['./detail-notes.component.css']
})
export class DetailNotesComponent implements OnInit {

    private ngUnsubscribe$ = new Subject();

    constructor(private queryInvoiceService: QueryInvoiceService) { }

    ngOnInit() {  }

    getInvoice(): void {
    this.queryInvoiceService.getInvoice(this.refInvNumber, this.refTo)
    .pipe(takeUntil(this.ngUnsubscribe$))
    .subscribe(
      (regInvoices: RegInvoice[]) => {
        this.regInvoices = regInvoices;
        console.log(regInvoices);

      },
      err => console.log(err)
      );
    }

    onClick(): void {
      console.log(this.refInvNumber);
      this.getInvoice();
    }

    ngOnDestroy() {
      this.ngUnsubscribe$.next();
      this.ngUnsubscribe$.complete();
    }
}

В этом случае подписка активируется по клику. После завершения передачи данных подписка должна быть отменена. Для этого я использую оператор takeUntil() через трубу.

При таких обстоятельствах я хотел бы знать, как я могу проверить, остаются ли активные подписки вне контроля компонентов, и при каких условиях существует более высокий риск этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...