是否有办法在Angular服务中而不是在Angular组件中(通过订阅)处理RxJs POST或GET(或与此相关的所有CRUD操作)的成功?
我想设置一个BehaviorSubject来发出用户已成功登录的消息。我正在考虑通过我的BehaviorSubject(this.loggedIn.next(true)
)与各种同级组件共享成功结果,因为这些同级组件需要根据单个服务userLogin()
调用进行更改。
这是我的AuthenticationService中的userLogin方法和BehaviorSubject:
private loggedIn = new BehaviorSubject<boolean>(false);
userLogin(user): Observable<any> {
return this.http
.post(this.apiUrl, user, httpOptions)
.pipe(catchError(this.handleError));
}
这是我想要在AuthenticationService中使用的伪代码:
private loggedIn = new BehaviorSubject<boolean>(false);
userLogin(user): Observable<any> {
return this.http
.post(this.apiUrl, user, httpOptions),
this.loggedIn.next(true), <<--------
.pipe(catchError(this.handleError));
}
提前谢谢!
答案 0 :(得分:2)
您可以尝试:
private loggedIn = new BehaviorSubject<boolean>(false);
userLogin(user): Observable<any> {
return this.http
.post(this.apiUrl, user, httpOptions)
.pipe(map((res: any) => {
this.loggedIn.next(true)
return res;
}), catchError(this.handleError));
}
答案 1 :(得分:0)
订阅后处理
ngOnInit() {
this.loading.present();
this.yourService.getUsers().
subscribe(data => {
console.log(this.data);
},
//Errr----->***
err =>{ console.log('HTTP Error', err),this.loading.dismiss()}
);
}
在使用中可以处理
https://scotch.io/bar-talk/error-handling-with-angular-6-tips-and-best-practices192
handleError(error) {
///your error
let errorMes = '';
if (error.error instanceof ErrorEvent) {
// client-side error
errorMes = `Error: ${error.error.message}`;
} else {
// server-side error
errorMes = `Error Code: ${error.status}\nMessage:
${error.message}`;
}
window.alert(errorMes);
return throwError(errorMes);
}