если состояние запускается или останавливается, подпишитесь на наблюдаемую 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();
}
})