@vava0798

Как обработать HTTP запрос в сервисе, и передать observable ниже по цепочке?

Есть следующая структура :
59eb1c74ea9ab217020615.png

Но я не понимаю, как получить ошибку в сервисе UserService, обработать в ErrorService, и получить результат в компоненте.

А если нет ошибки то отправить observable в компонент, чтобы подписаться там на него и получить данные. Или даже отправлять в компонент сразу данные, но как тогда сделать это асинхронно?

MyHttpService.ts

export class MyHttpService {
   constructor(private http: Http) {}

   getData(url: string): Observable<any> {
      return this.http.get(url);
   }
}


UserService.ts

export class UserService{
      constructor(private http: MyHttpService) {}

      getUsers(){
        return this.http.getData('http://getUsers.com');
      }
 }


Пробовал делать через .switchMap но что-то безуспешно, данные в компонент не прилетают, или я делаю что-то не так?

getUsers(){
        return this.http.getData('http://getUsers.com')..switchMap(
      (response): any => {
        200 === response.status ? Observable.of(this.sta) : console.log('222');
      };
}
  • Вопрос задан
  • 160 просмотров
Пригласить эксперта
Ответы на вопрос 1
dasha_programmist
@dasha_programmist
ex Software Engineer at Reddit TS/React/GraphQL/Go
1) Если версия >=4.3 то можно уже использовать HttpClient из @angular/common/http
2) Не ясно почему данные должны прилетать в компонент, ведь код компонента ты почему-то скрыл
3)
// service
getUsers(){
return this.http.get('url').map(resp=>resp.json()||[]);
}
// component
// 1 вариант
users: [];
// 2 вариант
users: Observable<[]>;
ctor(uSvc:UserService){
// 1 вариант
uSvc.getUsers().subscribe(users=>this.users=users);
// 2 вариант
this.users = uSvc.getUsers();
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы