Я столкнулся с особой проблемой. Мой component
подписывается на Subject
. Я получаю данные от ассоциированного observable
, когда вызывается первый error
, но не от последующих. Я не отписался.
Я регистрируюсь с данными существующего пользователя. Я получаю ошибку в первый раз (правильное поведение). Затем я снова нажимаю кнопку регистрации, чтобы отправить тот же запрос, но на этот раз компонент не получает сообщение от error
.
Интересно, если я использую next
вместо error
, тогда код работает нормально Неужели observable
перестает работать, если вызывается error
?
Фрагменты кода
component.ts
ngOnInit() {
this.userSignupSubscription = this.subscribeToSignupAttempt();
this.createForm();
}
subscribeToSignupAttempt() {
return this.userManagementService.userSignUpState$.subscribe(
(res: Result) => { console.log('signup response ',res);this.handleSignupResponse(res); },
(error: Result) => { console.log('signup error response ',error);this.handleSignupErrorResponse(error); },
);
}
Бэкэнд-сервис, отправляющий данные
@Injectable()
export class UserManagementService{
...
private signUpStateSubject: Subject<Result>;
public userSignUpState$: Observable<Result>; // naming convention for Streams has $ in the end.
constructor(){
this.signUpStateSubject = new Subject<Result>();
this.userSignUpState$ = this.signUpStateSubject.asObservable();
}
addUser(){
...
(error: ServerResponseAPI) => { //This code send the message.
console.log("got error from the Observable: ",error);
const errorMessage: string = this.helper.userFriendlyErrorMessage(error);
this.signUpStateSubject.error(new Result(errorMessage, error['additional-info'])); //change this to .next and the code works
}
}
см. Пи c ниже