У меня есть наблюдаемый запрос к серверу:
let request = of(1).pipe(delay(6000));
Затем я активирую загрузчик, пропуская наблюдателя внутри и подписываюсь:
this.spinnerService.activate(request);
this.$sub = request.subscribe((data) => {});
В ngOnDestroy
Я убиваю все Наблюдаемые:
ngOnDestroy() {
this.$sub.unsubscribe();
this.spinnerService.disactivate();
}
Так проблема в том, как отменить наблюдателя request
внутри службы?
Служба:
export class SpinnerService {
private preloaderState$ = new BehaviorSubject<boolean>(false);
private stop$ = new Subject();
public activate(
obs: Observable<any>[],
startAfterMilliseconds: number = 1000,
finishAfterMilliseconds: number = 0
) {
forkJoin(obs).subscribe(
() => {
console.log("Finish loader...");
this.disactivate();
},
(error) => console.log("ERROR: " + error)
);
of(true)
.pipe(delay(startAfterMilliseconds), takeUntil(this.stop$))
.subscribe(
() => {
console.log("Run loader...");
this.preloaderState$.next(true);
},
(error) => console.log("ERROR:" + error)
);
}
public disactivate() {
this.preloaderState$.next(false);
this.stop$.next();
this.stop$.complete();
console.log("Disactivate all..");
}
public preloader(): Observable<boolean> {
return this.preloaderState$.asObservable();
}
}
Почему, когда я все останавливаю:
this.$sub.unsubscribe();
this.spinnerService.disactivate();
forkJoin все еще ожидает ответа от сервера. Как отменить forkJoin(obs)
?