Избегайте получения предыдущих ошибок в теме rx js (asObservable) при новых подписках - PullRequest
1 голос
/ 15 апреля 2020

У меня есть служба (singleton) в angular, которая выставляет субъект rx js как наблюдаемый. Компонент подписывается на наблюдаемое. Когда в наблюдаемой возникает ошибка, компонент получает ошибку и отображает ее. Однако, если пользователь уходит от компонента, а затем уходит назад, немедленно выдается ошибка.

см. https://stackblitz.com/edit/angular-nboawu

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Это на самом деле поведение субъектов (а также наблюдаемых) в целом. Если происходит ошибка, этот поток заканчивается. Поэтому довольно редко выдается ошибка в теме, особенно когда вы используете ее для управления состоянием в angular приложениях. Канал ошибок также скорее используется для технических ошибок, которые происходят внутри вашей наблюдаемой, для "сценария ошибок ios" Я бы предпочел использовать следующий канал, но испустить там сложный объект, возможно, что-то вроде

export interface SearchQueryResult {
  data: SOMETHING,
  error: any
}
0 голосов
/ 15 апреля 2020

Когда вы используете Subject.error, субъект останавливается, и с ним ничего не происходит после этого, поэтому вы не должны его использовать.

Это исправит вашу проблему, кроме того, как совет, выловите ошибки API самостоятельно. и обрабатывать их как вы sh. Например, вы можете хранить их где-нибудь или использовать Sentry.io (Sentry имеет бесплатный уровень и хорошо работает с Angular).

Например:

this.api.getData().pipe(
  catchError(error => this.doSomethingWithError(error)),
);
...