RxJs Observable Как справиться с успехом - PullRequest
0 голосов
/ 08 октября 2019

Есть ли способ обработать успешное выполнение POST или GET RxJs (или всех операций CRUD в этом отношении) в службе Angular, а не в компоненте Angular (посредством подписки)?

Я бы хотелМне нравится настраивать BehaviorSubject, чтобы выдавать сообщение о том, что пользователь успешно вошел в систему. Я думал об обмене результатами успешной работы с различными одноуровневыми компонентами через мой BehaviorSubject (this.loggedIn.next(true)), поскольку эти одноуровневые компоненты должны вносить изменения на основе одного сервисаuserLogin() вызов.

Это мой метод 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 ]

2 голосов
/ 08 октября 2019

Вы можете попробовать:

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));
}
0 голосов
/ 08 октября 2019

обрабатывать после подписки

    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);
     }
...