получение данных с 1-й ошибки, но не последующих в теме - PullRequest
0 голосов
/ 02 апреля 2020

Я столкнулся с особой проблемой. Мой 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 ниже

enter image description here

1 Ответ

0 голосов
/ 03 апреля 2020

Кажется, что я должен использовать next вместо error, потому что именно так работает rxjs. Это контракт RX js. error означает, что поток больше не работает, и нужно будет открыть новый.

...