Я пытаюсь внедрить прямые наблюдаемые потоки в мой шаблон с помощью асинхронного канала и обрабатывать ошибки, как описано в этом ответе S.O.
Код следующий:
export class MyClass {
private myData$: Observable<any>;
private hasError$: Observable<boolean>;
constructor(private shared: SharedService) {
this.myData$ = this.shared.data$;
this.hasError$ = this.myData$.catch(err => Observable.of(true)).startWith(false);
}
}
templateUrl: `
<div *ngFor="let elm of (myData$ | async)?.data">
...
</div>
<div *ngIf="(hasError$ | async)" class="myDataErrorPlaceholder">
<h3>Oooops ! An error occured.</h3>
</div>
`
Независимо от того, что я пытаюсь, myDataErrorPlaceholder никогда не будет скрыт.
Я подписался на свой hasError $ observable для отладки и мог видеть, что начальное значение из моего startWith транслировалось, но было немедленно заменено данными, полученными myData $. Я не могу действительно обернуть голову вокруг этого. Что вызывает такое поведение? Как я могу реализовать прямую обработку ошибок без необходимости вручную подписываться на Observable в моем компоненте?