Неопределенная переменная в angular с использованием ionic framework

Я пытаюсь установить значения из ответа JSON в некоторые переменные. Но значение не установлено и возвращает «undefined» при попытке увидеть значения в Console.log ().

Кто-нибудь знает, что я здесь делаю не так?

public data: any;
carbs: string;
fat:any;
protein:any;

constructor(public navCtrl: NavController,public userprovider: UserProvider) {

    //returns json array
    this.user = this.userprovider.getUser(userid);

    this.user.toPromise().then(res => {

        this.carbs = res[0].carbs;
        this.fat = res[0].fat;
        this.protein = res[0].protein;

    });

    console.log(this.carbs);
   //pass the data here
     this.data = {"Macros":[{"Macros":"Prot","time":this.protein,"color":"#3fa9f5","hover":"#57c0f5"},{"Macros":"Carb","time":this.carbs,"color":"rgb(236, 240, 241)","hover":"rgb(236, 240, 241)"},{"Macros":"Fat","time":this.fat,"color":"rgb(52, 73, 94)","hover":"rgb(52, 73, 94)"}]};


}

Вы уверены, что this.user не является неопределенным?

user4799206 10.08.2018 14:40

этот пользователь возвращает json, console.log (res [0] .carbs) внутри res => также выводит правильное значение.

sdfgg45 10.08.2018 14:42

ionViewDidLoad () {} используйте эту функцию. Скопируйте и вставьте в него свой код и проверьте, что происходит.

user4799206 10.08.2018 14:43

Не определено и там.

sdfgg45 10.08.2018 14:45

очень вероятно, что до этого .carbs = res [0] .carbs; строка console.log (this.carbs); инициирован.

user4799206 10.08.2018 14:45

Где вы собираетесь использовать this.carbs?

user4799206 10.08.2018 14:46

Я имею в виду, вы передадите его другой функции или будете использовать в html?

user4799206 10.08.2018 14:46

Я передаю данные из json в другую функцию, которая использует значения в диаграмме :)

sdfgg45 10.08.2018 14:48

Хорошо, это решит проблему. Я напишу это как ответ.

user4799206 10.08.2018 14:49

Позвольте нам продолжить обсуждение в чате.

user4799206 10.08.2018 14:54

Я добавил массив json для данных круговой диаграммы внутри с переменными, теперь я получаю данные undefined.

sdfgg45 10.08.2018 14:57

проверить ответ еще раз, я его обновил

user4799206 10.08.2018 14:58
0
12
210
1

Ответы 1

Это потому, что console.log(this.carbs); инициируется до завершения this.carbs = res[0].carbs;. Поэтому вместо того, чтобы вызывать функцию за пределами области видимости, вызывайте ее внутри своей области.

Вызовите свою функцию из:

 this.user.toPromise().then(res => {

        this.carbs = res[0].carbs;
        this.fat = res[0].fat;
        this.protein = res[0].protein;
        this.yourFunction(res[0].protein, res[0].carbs, res[0].fat );
    });

. . .

yourFunction(protein, carbs, fat){
 this.data = {"Macros":[{"Macros":"Prot","time":protein,"color":"#3fa9f5","hover":"#57c0f5"},{"Macros":"Carb","time":carbs,"color":"rgb(236, 240, 241)","hover":"rgb(236, 240, 241)"},{"Macros":"Fat","time":fat,"color":"rgb(52, 73, 94)","hover":"rgb(52, 73, 94)"}]};
}

То же: ERROR TypeError: "this.data is undefined"

sdfgg45 10.08.2018 15:02

Приходите в чат, если stackoverflow не заблокирует комментарии

user4799206 10.08.2018 15:03

Другие вопросы по теме