У меня есть rxjs BehaviorSubject
подписаться на использование async
трубу от углового 2 и у меня есть catch
для обработки возможных ошибок он бросает. Проблема в том, что каждый раз, когда я получаю сообщение об ошибке, он запускает бесконечный цикл, потому что мой улов возвращает Observable, полученный из BehaviorSubject
, и я думаю, что труба async
возвращается к наблюдаемому, когда я возвращаю catch
.Бесконечный цикл при ловле ошибки от BehaviorSubject подписались асинхронном трубами на Angular 2
Код выглядит примерно так:
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;
});
}
Как вы можете видеть, мой улов возвращает текущий наблюдаемый, поскольку он ДОЛЖЕН вернуть наблюдаемое. Итак, что происходит, когда я отправляю this.listSubject.error(error)
, код вводит бесконечный цикл, вызывающий catch
бесконечно, потому что, как я уже говорил, я думаю, что BehaviourSubject
повторно выбрасывает ошибку, потому что труба async
повторно подписывается на наблюдаемую, когда catch
возвращает его.
Я попытался вернуть свой предыдущий кешированный массив в ошибке, чтобы вернуть Observable.of(error.cached)
, но у меня возникло совершенно новое множество проблем, потому что думаю, что асинк не был подписан на BehaviorSubject
.
Как я уже говорил, это грубое представление моего реального кода, но логика в основном такова.
Я пробовал разные подходы к этому, но мне не удалось остановить этот бесконечный цикл.
Заранее благодарим за помощь.
Какова ошибка, которую вы получите, и что вы ожидаете от кода в случае ошибки? – KwintenP
Любая ошибка, я передаю ошибку, используя эту функцию ошибки в службе List, даже если я просто передаю строку, у меня возникнет проблема. Но обычно я пропускаю ошибки ответа api. –