在Angular的成员Stephen的视频中,他展示了"Updates and Notifications with the Angular Service Worker"。
我们何时何地取消订阅Angular的SwUpdate.available?或者我们是否应该关注此订阅的开销,即使它没有取消订阅?
Stephen订阅了下面的代码。
constructor(update: SwUpdate, push: SwPush, snackbar: MatSnackBar) {
update.available.subscribe(update => {
console.log('update available');
});
}
答案 0 :(得分:2)
不要听Pengyy。如果这些订阅可能会累积(从而产生内存泄漏),您应该取消订阅所有订阅。
我的意思是,如果订阅不在全局服务或实用程序类中,只调用一次,而是在一个Component(在用户点击应用程序时初始化和销毁),那么你应该做的事情如下:
private _destroy$ = new Subject();
ngOnDestroy(): void {
this._destroy$.next();
}
constructor(private _store: Store<AppState>) {
this._store.select(someReduxStream$).takeUntil(this._destroy$).subscribe(value => {/**/});
}
如果您不希望自己将此代码添加到应用中包含流的每个组件,则可以使用Aspect / Decorator,如:https://github.com/NetanelBasal/ngx-take-until-destroy
如果您知道某个地方的流只会使用一次,那么您可以在收到第一个值后取消订阅:
stream$.take(1).subscribe(value => {/**/});
答案 1 :(得分:0)
使用takeWhile并检查是否已启用服务工作者更新。只要它已启用,我们将继续订阅。
constructor(update: SwUpdate, push: SwPush) {
update.available
.pipe(
takeWhile(() => this.swUpdate.isEnabled)
)
.subscribe(update => {
console.log('update available');
});
}