首页 > 解决方案 > 如何取消订阅我的应用程序中的所有订阅?

问题描述

我有一个很大的应用程序,其中有很多订阅方法。如果我想退订其中一个,那么我将使用以下代码:

getUsersSubscription: Subscription;

ngOnInit() : void {

   this.getUsersSubscription = this.userService().subscribe(users => {
     ...something
   })
}

ngOnDestroy() : void {
   this.getUsersSubscription.unsubscribe();
}

问题是我有很多页面 - 也有组件。我有 jwt 令牌,当它过期时,我正在注销用户。问题是当我这样做时,一些电话仍在发生......我如何在注销后取消订阅我的应用程序中的所有内容,所以我不需要通过页面中的所有组件对我的所有订阅重复此步骤?

此外,我正在使用拦截器来捕获该 jwt 到期,并将用户重定向到登录页面。但是,如果用户单击某些内容,登录页面中仍然会进行调用 - 在他注销前几秒钟

标签: angularrxjs

解决方案


如果你需要取消订阅很多Observable,你应该使用一个Subscription数组:

private subscriptions: Subscription[] = [];

ngOnInit() {
    this.subscriptions.push(this.userService.subscribe(users => {
     ...something
   }));
}

ngOnDestroy() {
    this.subscriptions.forEach(subscription => subscription.unsubscribe());
}

但我认为您真正的问题是您的订阅量可能比您需要的多。

首先,您应该尽可能使用async管道。它可以很好地免费处理订阅和取消订阅。

另外,请注意,您通常不需要取消订阅冷的 observables(如 由 返回的那些HttpClient),因为当 http 请求完成时,observable 会终止。您只需取消订阅具有副作用的冷可观察对象。


推荐阅读