Бесконечный цикл при отлове ошибки от 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 больше.

Как я уже говорил, это грубое представление моего реального кода, но логика в основном такова.

Я пробовал разные подходы к этому, но мне не удалось остановить этот бесконечный цикл.

Заранее спасибо за помощь.

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

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