на каждую отдельную подписку, но я чувствую, что этот метод проще и имеет больше смысла для того, что я делаю.

ложении 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 как «лучшее» решение, но я все еще не доволен этим. Есть ли более чистый способ сделать это, что я скучаю?

Ответы на вопрос(0)

Ваш ответ на вопрос