Бесконечный цикл при отлове ошибки от BehaviorSubject, подписанного асинхронным каналом на Angular 2
У меня есть rxjsBehaviorSubject
Я подписываюсь на использованиеasync
труба от Angular 2 и у меня естьcatch
для обработки возможных ошибок, которые он выбрасывает. Проблема в том, что каждый раз, когда я получаю сообщение об ошибке, он запускает бесконечный цикл, потому что мой catch возвращает Observable, полученный изBehaviorSubject
и я думаю, чтоasync
труба повторно подписывается на наблюдаемое, когда я возвращаюcatch
.
Код выглядит примерно так:
ListService - это@Injectable
где у меня есть BehaviorSubject и свойство сObservable
.
private listSubject: BehaviorSubject<IItem[]>;
public get listObservable() {
return this.listSubject.asObservable()
}
private error(error: IError) {
this.listSubject.error(error);
}
ListComponent - это@Component
это показывает список наблюдаемых.
// Template
<items-view [items]="list | async"></items-view>
// Code
public get list() {
return this.listService.listObservable
.catch((error) => {
this.handleError(error);
return this.listService.listObservable;
});
}
Как вы можете видеть, моя команда catch возвращает текущую наблюдаемую, поскольку она ДОЛЖНА возвращать наблюдаемую. Итак, что происходит, когда я отправляюthis.listSubject.error(error)
код входит в бесконечный цикл, вызывающийcatch
до бесконечности, потому что, как я уже говорил, я думаю, чтоBehaviourSubject
повторно выдает ошибку, потому чтоasync
труба повторно подписывается на наблюдаемую, когдаcatch
возвращает это.
Я попытался вернуть мой предыдущий кэшированный массив в ошибке, чтобы вернутьObservable.of(error.cached)
, но я получил совершенно новый набор проблем, потому что думаю, что асинхронный не был подписан наBehaviorSubject
больше.
Как я уже говорил, это грубое представление моего реального кода, но логика в основном такова.
Я пробовал разные подходы к этому, но мне не удалось остановить этот бесконечный цикл.
Заранее спасибо за помощь.