Проблема с выбросом после switchMap угловой наблюдаемой - PullRequest
0 голосов
/ 03 марта 2019

Проблема в том, что когда this.getPost ())) возвращает ошибку, например, 404 (это функция, которая возвращает GET), тогда код this.loggedChange.emit(false) не выполняется, и я не знаю почему.После этой ситуации у меня неправильный вывод loggedChangedHandler.Это похоже на внутреннюю ошибку, после swtichMap this.loggedChange не «наблюдает».До switchMap он наблюдал, так что я думаю, что это может быть подсказкой, но я не знаю, почему это работает так.Если первая функция возвращает ошибку (this.authLogin - она ​​также возвращается get), то this.loggedChange.emit работает нормально.

дочерний компонент:

login(): void {
  this.authLogin(this.email, this.password)
    .pipe(
      tap(() => this.loggedChange.emit(true)),

      switchMap(() => this.getPost())
    )

    .subscribe(
      resp => {
        //some code here
      },
      error => {
        this.loggedChange.emit(false);
      }
    );
}

в родительском компоненте у меня есть что-то вроде этого:

<login-component (loggedChange)="loggedChangeHandler($event)"></login-component>

и в ts

loggedIn$ = new BehaviorSubject(false);

loggedChangedHandler(el: boolean): any {
  this.loggedIn$.next(el);
}

1 Ответ

0 голосов
/ 05 марта 2019

Я думаю, что у вас такое поведение, потому что ошибка происходит в вашем this.getPost() вызове.

Поскольку у вас нет обработчика ошибок, наблюдаемое пытается продолжить работу, несмотря на возникшую ошибку.

Вы можете попытаться добавить catchError в свою трубу следующим образом:

this.authLogin(this.email, this.password)
    .pipe(
      tap(() => this.loggedChange.emit(true)),
      switchMap(() => this.getPost()),
      catchError(error => this.loggedChange.emit(false))
    )
    .subscribe(
      resp => {
        //some code here
      },
      error => {
        this.loggedChange.emit(false);
      }
    );

...