Loop infinito ao capturar erro do BehaviorSubject inscrito pelo canal assíncrono no Angular 2
Eu tenho um rxjsBehaviorSubject
Eu assino o uso de umasync
tubo de Angular 2 e eu tenho umcatch
para lidar com eventuais erros que ele lança. O problema é que toda vez que eu recebo um erro, ele inicia um loop infinito porque minha captura retorna o Observable derivado doBehaviorSubject
e eu acho que oasync
tubo reinscreve para o observável quando eu retornar ocatch
.
O código é mais ou menos assim:
ListService - é um@Injectable
onde eu tenho o BehaviorSubject e a propriedade com oObservable
.
private listSubject: BehaviorSubject<IItem[]>;
public get listObservable() {
return this.listSubject.asObservable()
}
private error(error: IError) {
this.listSubject.error(error);
}
ListComponent - é um@Component
que mostra a lista observável.
// 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;
});
}
Como você pode ver, minha captura retorna o observável atual, pois DEVE retornar um observável. Então, o que acontece é que quando eu envio othis.listSubject.error(error)
o código entra em um loop infinito chamando ocatch
indefinidamente porque, como eu disse antes, acho que oBehaviourSubject
lança novamente o erro porque oasync
o tubo reinscreve o observável quando ocatch
retorna.
Tentei retornar minha matriz em cache anterior no erro para retornar umObservable.of(error.cached)
, mas recebi um novo conjunto de problemas porque acho que o assíncrono não estava inscrito noBehaviorSubject
não mais.
Como eu disse antes, esta é uma representação aproximada do meu código real, mas a lógica é basicamente isso.
Eu tenho tentado várias abordagens diferentes para isso, mas não consegui parar esse loop infinito.
Obrigado antecipadamente pela ajuda.