Задать вопрос
ajky
@ajky
Full-stack developer

Как получить значение subscribe() в сервисе из компонента?

Если без запроса к серверу, то легко, а вот результат запроса передать не получается :/
Нужно транслировать значение в компонент.
@Injectable() 
export class UserService {
    constructor(
        private auth:       Auth,
        private http:       Http,
        private authHttp:   AuthHttp) {}
  
    getUsers() {
        this.authHttp
            .get(APP_SERVER + 'api/users')
            .map((response: Response) => response.json())
            .subscribe(
            (data) => {
                return data;
            },
            (error) => {
                console.log('user service error');
            }
        );
    }
}
  • Вопрос задан
  • 1077 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
AMar4enko
@AMar4enko
Не совсем понимаю, в чем затык у вас
getUsers() {
  return this.authHttp
    .get(APP_SERVER + 'api/users')
    .map((response: Response) => response.json());
}

constructor(svc: UserService) {
  svc.getUsers().subscribe((response) => console.log(response));
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
xeeqqw
@xeeqqw
WEB-программист на ASP.NET MVC
Никак. Попытаюсь объяснить (за терминологию сильно не пинайте).
Суть в том, что в данном примере вы ничего не возвращаете из функции getUser().

return data;
относится не к функции getUser(), а к лямбде
(data) => {
    return data;
}


Чтобы получить значение в компоненте, вам все же придется возвращать из сервиса Promise или Observable (как в вашем случае) и подписываться на результат при помощи then (Promise) или subscribe (Observable). Как-то иначе взаимодействовать с асинхронными операциями (http) не выйдет
Ответ написан
vitali1995
@vitali1995
Вариант есть, причём довольно простой. Достаточно добавить в сервис EventEmitter, который будет посылать emit(data) в результате каждого запроса. Любой компонент, который включает этот сервис, в конструкторе подписывается на отправляемые события, после которого может обновлять контент.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы