Если единственный способ startedPoll
стать true
- это вызов метода startPoll
, просто переместите вызов subscribe
из вашего метода ngOnInit
в startPoll
:
ngOnInit() {
// want to start when startedPoll becomes true otherwise dont
let url = 'getStatus'
this.pollingObservable = interval(5000).pipe(
switchMap(() => this.http.getCall(url))
);
}
startPoll() {
this.pollingSubscribe = this.pollingObservable.subscribe(data => {
if (data['success']) {
this.pollingData = data['result']
this.processData(this.pollingData)
}
}, error => {
this.error = true;
this.errorData = this.createPollingFiles;
})
this.startedPoll = true;
}
ngOnDestroy() {
if (this.pollingSubscribe) {
this.pollingSubscribe.unsubscribe();
}
}
Убедитесь, что startPoll
не вызывается более одного раза, когда опрос активен. В противном случае Subscription
, который уже сохранен в this.pollingSubscribe
, будет потерян, опрос будет удвоен по частоте,и некоторые опросы будут продолжаться после уничтожения компонента.