RxJs可观察到如何处理成功

时间:2019-10-08 11:06:43

标签: angular rxjs observable

是否有办法在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));
}

提前谢谢!

2 个答案:

答案 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);
     }