Rxjs, подписка Angular получает ObjectUnsubscribedError

У меня есть служба, которая определяет группу BehaviorSubject объектов, на которые подписан компонент верхнего уровня, и данные поступают из серверной части, но это просто заполняет субъекты данными, на которые подписывается компонент. Я также использую ngOnDestroy для .unsubscribe() всего, на что подписан.

Проблема возникает, когда я добавляю новый компонент ниже уровня компонента верхнего уровня, который также внедряется в службу, также подписывается на данные службы, а также отменяет подписку внутри ngOnDestroy. В коде это выглядит нормально, но на практике вызывает некоторые ошибки.

Иногда, когда компонент создается, я получаю несколько ObjectUnsubscribedError, и из того, что я могу сказать BehaviorSubject, я подписываюсь на свойство closed:true, которое, по-видимому, является источником ошибок.


person Chris Rutherford    schedule 04.10.2019    source источник


Ответы (1)


Не видя какого-либо кода, трудно сказать наверняка, но похоже, что вы вызываете .unsubscribe() непосредственно на BehaviorSubject, а не на Subscription. Рассмотрим следующее:

const source = new BehaviorSubject('some-value');
source.subscribe();
source.unsubscribe();
source.subscribe(); // <-- This line will throw ObjectUnsubscribedError

Вместо вышеперечисленного сделайте следующее:

const source = new BehaviorSubject('some-value');
const subscription = source.subscribe();
// And when it's time to unsubscribe in ngOnDestroy...
subscription.unsubscribe();
person Sam Herrmann    schedule 04.10.2019
comment
Я думаю, что вы, возможно, ударили его по голове там. Отписываю тему, а не подписку... - person Chris Rutherford; 04.10.2019