как проверить, если уже отписался от наблюдаемого в угловой - PullRequest
0 голосов
/ 05 октября 2019

если состояние запускается или останавливается, подпишитесь на наблюдаемую autoRefreshEveryMinute

Если состояние запущено, подпишитесь на autoRefreshEveryFiveMinutes и отмените подписку для наблюдаемой autoRefreshEveryMinute

Если состояние не выполняется, отмените подписку для обоихautoRefreshEveryMinute и autoRefreshEvery5Minutes observable

Я попытался сделать следующее, установив наблюдаемый в методе getter.

Однако я понимаю, что он всегда будет вызывать метод подписки в получателе, даже если он уже подписан на наблюдаемое.

Может ли он быть вызван один раз? как проверить, подписаны ли уже на наблюдаемые?

 get isDMRunning() {
     const isDMRunning = !!this.details && this.details.status === StatusEnum.RUNNING; 
    // how to execute the if function only once, how to check that if already subscribed then we doesn't need to invoke it again?
    if (isDMRunning && this.autoRefreshEveryMinute) {
        this.autoRefreshEveryMinute.unsubscribe();

        // Polling details data every 5 minutes if is running
        this.autoRefreshEveryFiveMinute = interval(300000)
            .pipe(
                takeUntil(this.ngUnsubscribe)
            )
            .subscribe(() => {
                // Refresh page
                this.showDetailsLoading = true;
                this.loadDetails();
            });
    }
    return isDMRunning;
}

  get isDMStartingStopping() {
     const isDMStartingStopping = !!this.details && (this.details.status === StatusEnum.STARTING || this.details.status === StatusEnum.STOPPING);
    if (this.autoRefreshEveryFiveMinute) {
        this.autoRefreshEveryFiveMinute.unsubscribe();
    }
    // Polling details data every minutes
    this.autoRefreshEveryMinute = interval(60000)
        .pipe(
            takeUntil(this.ngUnsubscribe)
        )
        .subscribe(() => {
            // Refresh page
            this.showDetailsLoading = true;
            this.loadDetails();
        });
})

get isDMNotRunning() {
     const isDMNotRunning = !!this.details && (this.details.status === StatusEnum.NOTRUNNING);
    // the below if statement seems to invoked multiple times even though already unsubscribed from the observable
    if (this.autoRefreshEveryFiveMinute) {
        this.autoRefreshEveryFiveMinute.unsubscribe();
    }
   if (this.autoRefreshEveryMinute) {
        this.autoRefreshEveryMinute.unsubscribe();
    }
})
...