сохранение данных в javascript классах [решено] - PullRequest
0 голосов
/ 16 апреля 2020

Я получаю данные из API и сохраняю их в классе. Когда я пытаюсь вывести данные в функции, это дает мне ошибку undefined, но когда я вызываю их в консоли, я могу получить вывод.

class Api{
    GetAllRates(){
        async function getData(){
            const Data = await fetch(`https://api.exchangeratesapi.io/latest?`);
            const JData = await Data.json();
            return JData
        }
        getData()
            .then(data=>{
                this.Jdata = data;
            })
            .catch(err=>console.log(err));
    }
    makeUi(){
        Ui.compareSection(this.Jdata); // TypeError: data is undefined //
    }
}

Я тоже пробовал это, но я получить { } в качестве выходных данных

class Api{
    constructor(){
        this.Jdata = {};
    }
    GetAllRates(){
        async function getData(base=`EUR`){
            const Data = await fetch(`https://api.exchangeratesapi.io/latest?`);
            const JData = await Data.json();
            return JData
        }
        getData()
            .then(data=>{
                this.Jdata = data;
            })
            .catch(err=>console.log(err));
    }
    makeUi(){
        Ui.compareSection(this.Jdata);
    }
}

Проблема была решена с помощью следующего метода сначала разрушить обещание, а затем присвоить его переменным.

class Api{
    GetAllRates(){
        async function getData(base=`EUR`){
            const Data = await fetch(`https://api.exchangeratesapi.io/latest?`);
            const JData = await Data.json();
            return JData
        }
        getData()
            .then(data=>{
                this.Hdata = {
                    "base":data.base,
                    "rates":data.rates
                }
            })
            .catch(err=>console.log(err));
    }
...