на каждую отдельную подписку, но я чувствую, что этот метод проще и имеет больше смысла для того, что я делаю.
ложении Angular я управляю своими подписками, помещая их все в массив, затем циклически просматривая его и отписываясь во времяngOnDestroy
.
private subscriptions: Subscription[] = []
this.subscriptions.push(someObservable.subscribe(foo => bar))
Моя проблема в том, что я не нашел достаточно чистого способа справиться с отпиской. Идеальный способ был бы простой
ngOnDestroy () {
this.subscriptions.forEach(subscription => subscription.unsubscribe())
}
но это не работает Примечательно, что я по-прежнему получаю ошибки разрешения Firebase после выхода из системы (чего не происходит с «работающими» методами). Интересно, точно такой же методделает работать, если я вытащу его в отдельный класс:
export class Utils {
public static unsubscribeAll (subObject: {subscriptions: Subscription[]}) {
subObject.subscriptions.forEach(subscription => subscription.unsubscribe())
}
}
// ---------- back to the component
ngOnDestroy () {
Utils.unsubscribeAll({subscriptions: this.subscriptions}) // no Firebase errors
}
но мне не очень нравится это решение, в основном потому, что оно работает только тогда, когда я оборачиваю массив в объект, чтобы он передавался как ссылка. Другой метод работы, который я нашел, это написать его как цикл for:
ngOnDestroy () {
/* tslint:disable */
for (let i = 0; i < this.subscriptions.length; i++) {
this.subscriptions[i].unsubscribe()
}
/* tslint:enable */
}
но помимо ненужной длины, это также заставляет TSLint жаловаться, потому что считает, что вместо этого я должен использовать цикл for (который не работает), поэтому мне приходится каждый раз добавлять дополнительные комментарии.
В настоящее время я использую опцию Utils как «лучшее» решение, но я все еще не доволен этим. Есть ли более чистый способ сделать это, что я скучаю?