问题是:当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);
}
答案 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);
}
);