我有一个getDimensions
方法,它返回一个Observable<string[]>
。
尺寸.service.ts
public getDimensions(id: string): Observable<string[]> {
return this.service.loadDimensions(id);
}
重装机服务
public update(idsToUpdate: string[]): void {
idsToUpdate.map(id => this.dimensionService.getDimensions(id)).pipe(
map(
newDimensions => this.updateDimensions(newDimensions)
)
).subscribe(); // ToDo: unsubscribe
}
然后在应用程序的另一部分,我在
update
方法中调用这个方法。问题是,我不知道如何正确地取消订阅getDimensions
。一个可能的解决方案是,创建一个Subscription
然后在OnDestroy
中调用unsubscribe,但对我来说这不是一个好的解决方案:这是一个服务,我正在整个应用程序中使用它,因此
OnDestroy
钩子永远不会出现我每
update
秒调用n
方法,因此每n
秒都会有一个新订阅可能的解决方案:(不好)
重装机服务
private subscriptions: Subscription = new Subscription();
...
...
public update(idsToUpdate: string[]): void {
const sub = idsToUpdate.map(id => this.dimensionService.getDimensions(id)).pipe(
map(
newDimensions => this.updateDimensions(newDimensions)
)
).subscribe(); // ToDo: unsubscribe
this.subscription.add(sub);
}
...
...
public onDestroy(): void {
this.subscription.unsubscribe();
}
编辑:
正如@jgerstle在评论中提到的,如果Observable完成了(这是我的情况),就不需要取消订阅。
最佳答案
如果你想退订时,你得到的数据或可观测完成
public update(idsToUpdate: string[]): void {
const sub = idsToUpdate.map(id => this.dimensionService.getDimensions(id)).pipe(
map(
newDimensions => this.updateDimensions(newDimensions)
)
).subscribe(() => sub.unsubscribe() ); // or you can use complate
}
关于angular - 如何正确退订这种可观察的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53113746/