switchMap角度可观察到后发出的问题

时间:2019-03-03 18:19:35

标签: angular typescript rxjs observable switchmap

问题是:当this.getPost())返回错误,例如404(返回GET的函数)时,代码this.loggedChange.emit(false)没有执行,我也不知道为什么。在这种情况下,我的loggedChangedHandler输出错误。看起来像内部错误,在swtichMap之后,this.loggedChange没有“观察到”。在switchMap之前,它已经观察到了,所以我认为这可能是一个线索,但是我不知道为什么它如此工作。如果第一个函数返回错误(this.authLogin-也返回),则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 :(得分:0)

我认为您有这种行为,因为该错误发生在您的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);
      }
    );