首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们应该在哪里取消订阅角的SwUpdate.available?

我们应该在哪里取消订阅角的SwUpdate.available?
EN

Stack Overflow用户
提问于 2018-05-25 02:23:15
回答 2查看 569关注 0票数 2

在一段由“角”成员斯蒂芬拍摄的视频中,他演示了“使用角服务工作人员更新和通知”

我们何时何地应该取消订阅角的SwUpdate.available?或者我们是否应该关注来自这个订阅的开销,即使它不是没有订阅的呢?

Stephen订阅了下面的代码片段。

代码语言:javascript
复制
  constructor(update: SwUpdate, push: SwPush, snackbar: MatSnackBar) {
    update.available.subscribe(update => {
      console.log('update available');
    });
}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-30 07:13:15

使用takeWhile并检查是否启用了服务工作人员更新。只要启用了它,我们就继续订阅。

constructor(update: SwUpdate, push: SwPush) { update.available .pipe( takeWhile(() => this.swUpdate.isEnabled) ) .subscribe(update => { console.log('update available'); }); }

票数 1
EN

Stack Overflow用户

发布于 2018-05-25 06:21:43

别听彭吉的话。如果订阅可能会累积(从而产生内存泄漏),则应该取消订阅所有订阅。

我的意思是,如果订阅不是在只被调用一次的全局服务或实用程序类中,而是在组件中(在用户单击应用程序时被初始化和销毁),那么您应该执行以下操作:

代码语言:javascript
复制
private _destroy$ = new Subject();

ngOnDestroy(): void {
  this._destroy$.next();
}

constructor(private _store: Store<AppState>) {
  this._store.select(someReduxStream$).takeUntil(this._destroy$).subscribe(value => {/**/});
}

如果您不想自己将这段代码添加到应用程序中包含流的每个组件中,则可以使用方面/装饰器,如:https://github.com/NetanelBasal/ngx-take-until-destroy

如果您在某个地方有一个您知道只使用一次的流,那么您可以在收到第一个值之后取消订阅:

代码语言:javascript
复制
stream$.take(1).subscribe(value => {/**/});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50520610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档