如何解决退订的角度

时间:2020-04-20 00:11:49

标签: javascript angular typescript

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 个答案:

答案 0 :(得分:3)

最基本的方法是存储从调用Subscription返回的subscribe,然后在离开页面时在unsubscribe上调用Subscription方法( ngOnDestroy Angular中的生命周期挂钩,有关生命周期挂钩的更多信息:here)。

在您的组件中:

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

还有许多其他方式:

  • 在需要值的模板中使用异步管道。它将自动为您退订!
  • 在示例中使用的
  • take运算符将在N个值后取消订阅。
  • takeWhile运算符,它将基于谓词取消订阅。

这里有一篇文章讨论了6种不同的退订方式:https://blog.bitsrc.io/6-ways-to-unsubscribe-from-observables-in-angular-ab912819a78f