gpt4 book ai didi

angular - 如何正确取消订阅这种可观察的

转载 作者:搜寻专家 更新时间:2023-10-30 21:57:16 25 4
gpt4 key购买 nike

我有一个 getDimensions返回 Observable<string[]> 的方法.

dimension.service.ts

public getDimensions(id: string): Observable<string[]> {
return this.service.loadDimensions(id);
}

reloader.service.ts

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调用取消订阅,但对我来说这不是好的解决方案:

  • 这是我在整个应用程序中使用的服务,所以 OnDestroy钩子(Hook)永远不会发生
  • 我调用 update方法每n秒,所以会有每个 n秒新订阅

可能的解决方案:(不好)

reloader.service.ts

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 在他的评论中提到的,如果可观察对象完成(这是我的情况),则无需取消订阅。

最佳答案

如果您想在获得数据或可观察完成时退订

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com