Как рассчитать количество незавершенных подписок, оставленных каждым компонентом или страницей? - PullRequest
0 голосов
/ 24 мая 2018
  1. В приложении Ionic страница - это просто компонент.
  2. Я хочу проверить общее количество подписок, оставленных незавершенными на каждой странице.Это означает, что они выполняют фоновую работу, которая не нужна.
  3. Предположим, у меня есть pageChanged$, который уведомляет об изменении страницы.

Моя текущая попытка

    let activeSubscriptions = 0;
    let originalUnsubscribe = Subscription.prototype.unsubscribe;
    Subscription.prototype.unsubscribe = function (...args) {
      activeSubscriptions--;
      return originalUnsubscribe.call(this, ...args);
    }
    let originalSubscribe = Observable.prototype.subscribe;
    Observable.prototype.subscribe = function (...args) {
      activeSubscriptions++;
      return originalSubscribe.call(this, ...args);
    }

    let pageChanged$ = new Subject<string>();
    let lastActiveSubs = 0;
    let lastName = 'Start';
    pageChanged$
      .subscribe((pageName) => {
        console.log(`${lastName} += ${activeSubscriptions - lastActiveSubs}`)
        lastActiveSubs = activeSubscriptions
        lastName = pageName
      })
  1. Можете ли вы предложить какой-либо лучший способ или улучшения?
  2. Когда страница «A» помещается поверх страницы «B», страница «B» уничтожается иликэшируется?

1 Ответ

0 голосов
/ 24 мая 2018

То, что я делаю, - это создание массива подписок, в котором есть один или несколько Observable для прослушивания.Всякий раз, когда я создаю подписку, я добавляю ее в этот массив.Затем, когда ударил ngOnDestroy, я прошёл их все и отписался:

@IonicPage()
@Component({
  selector: 'my-selector',
  templateUrl: 'myselector.html'
})
export class APage {
   subscriptions : Array<Subscription> = new Array<Subscription>();

   ngOnInit() {
      let a_new_subscription = someObservable.subscribe(someFunction);
      this.subscriptions.push(a_new_subscription);
      //Add as many subscriptions as created
   }

   //...

   ngOnDestroy(){
     this.subscriptions.forEach(
        subscription => {
           subscription.unsubscribe();   
        }
     )
   }
}
...