У меня есть метод 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
никогда не произойдет
- Я вызываю метод
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();
}
EDIT:
Как упомянул @jgerstle в своем комментарии, если наблюдаемое завершается (это мой случай), нет необходимости отписываться.