Почему моя переменная не определена в init в angular? - PullRequest
0 голосов
/ 30 апреля 2018

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

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;

}

но я понял:

ОШИБКА TypeError: Невозможно прочитать свойство 'view_count' из неопределенного

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

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

UPDATE:

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

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

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

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

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

ПРОСТО увидел. Вы написали getValue1 без btackets ...

0 голосов
/ 30 апреля 2018

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

this._http.get('API URL').map(res => res.json()).toPromise()
...