Как отменить наблюдаемый, если пользователь покинул компонент? - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть наблюдаемый запрос к серверу:

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)?

...