Почему моя переменная не определена в init в angular?

1

Я инициализирую службы на своем компоненте следующим образом:

ngOnInit() {
    this.getValue1();
    this.getValue2();
    this.getValue3();
}

и когда у служб есть данные, я хочу это сделать:

ngOnInit() {
    this.getValue1();
    this.getValue2();
    this.getValue3();
    this.result = this.value1.view_count.value + this.value2.view_count.value + this.value3.view_count.value;

}

но я получил это:

ERROR TypeError: невозможно прочитать свойство 'view_count' неопределенного

Как я могу ожидать, что результаты службы будут выполнены в моей работе?

Спасибо за вашу помощь.

ОБНОВИТЬ:

getvalue1(): void {
    this.subscription=this.dataService.getViews(360001167865).subscribe(data => {
        this.value1 = data;
    });
}

service.ts:

 getViews(id: number): Observable<any> {
    return this.http.get(this.URL + "views/" + id + "/count.json", { headers: headers });
}
  • 0
    Нам нужно немного больше информации, я думаю. Можете ли вы добавить код для функции getValue1 пожалуйста? Это асинхронный?
  • 0
    Должно ли это быть this.getValue1 (). View_count? Если целью является вызов метода, то вы хотите использовать круглые скобки. Кажется, это работает, потому что в javascript функция - это объект с полями, и она не может найти никакого поля view_count в этом объекте.
Показать ещё 2 комментария
Теги:
angular
init
service

2 ответа

0
Лучший ответ

Попробуйте использовать обещание, которое вам поможет, потому что это не асинхронная функция. это означает, что код будет ждать окончания ответа HTTP.

this._http.get('API URL').map(res => res.json()).toPromise()
  • 0
    Я использую Observable, я обновил свой пост. Спасибо за вашу помощь
  • 0
    Да, это правильный путь. отличная работа
0

вы можете сделать свою асинхронную функцию для ожидания некоторых данных

async getValue1() {
    result = await myAsyncOperation();
    return result;
}

но в угловом режиме существует rxjs для обработки асинхронных операций, поэтому вы должны использовать наблюдаемые...

Только что видел. вы написали getValue1 без btackets...

  • 0
    Извините, я потерпел неудачу, когда опубликовал Не работает для меня, когда я использую async / await. Спасибо за вашу помощь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню