как исправить отписку в angular - PullRequest
0 голосов
/ 20 апреля 2020

TS

tempThermometer = new BehaviorSubject<any>([]);
subscription: Subscription;

    const promises = list.map(
          (url: any) =>
            new Promise(resolve => {
              this.subscription = this.global.getData(url.link).pipe(take(1)).subscribe((res) => {
                const urlArr = new Array();
                urlArr.push(url);
                this.tempThermometer.value.filter((data: any) => {
                  if (data.spinning) {
                    return data.spinning = urlArr.findIndex((x: any) => x.sensor === data.sensor) === -1
                  }
                  return;
                });
                resolve(res);
              }, (err: Error) => {
                return reject(err);
              });
            })
        );

 merge(...observables).subscribe((results) => {
           console.log(results);
}


  ngOnDestroy() {
    if (this.subscription) {
      this.subscription.unsubscribe();
    }
  }

Здесь я хочу отменить подписку на обещания, потому что, когда я нажимаю на другую страницу, она все еще работает / получает данные, и я хочу, чтобы они прекратились, когда я нажимаю на другую страницу.

отмена подписки не работает. как это исправить?

1 Ответ

3 голосов
/ 20 апреля 2020

Самый простой способ c - сохранить Subscription, возвращенный вызовом subscribe, а затем вызвать метод unsubscribe для Subscription, когда вы покидаете страницу (жизненный цикл ngOnDestroy) зацепить Angular, подробнее о зацепках жизненного цикла: здесь ).

В вашем компоненте:

ngOnInit() {
  this.sub = this.something.subscribe( ... )
}
ngOnDestroy() {
  this.sub.unsubscribe();
}

Также есть много других способов:

  • Использование асин c канала в вашем шаблоне, где вам нужны значения. Он автоматически отменит подписку для вас!
  • take оператор, который вы использовали в своем примере, отменит подписку после N значений.
  • takeWhile оператор, который отменит подписку на основе предиката.

Вот статья, в которой обсуждаются 6 различных способов отписки: https://blog.bitsrc.io/6-ways-to-unsubscribe-from-observables-in-angular-ab912819a78f

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...