Показать сообщение отдельно
  #1 (permalink)  
Старый 01.05.2020, 10:26
DVV DVV вне форума
Кандидат Javascript-наук
Отправить личное сообщение для DVV Посмотреть профиль Найти все сообщения от DVV
 
Регистрация: 26.12.2017
Сообщений: 125

Обработка данных после получения через fetch
Подскажите, пожалуйста, как мне передать (вынуть) получаемые данные через API с помощью fetch для работы с ними в других функциях. Делаю return, но за пределами fetch данные не видны. Внутри fetch с ними работать получается. Но не хочется нагромождать код и пихать внутрь fetch кучу функций для обработки получаемых данных.

function addZero(num) {
        if (num <= 9) return '0' + num;
        else return num;
    }

    let arr = [];

    function getData(url) {
        fetch(url)
        .then( (responce) => {
            if (responce.status >= 200 && responce.status < 300) {
                return responce.json();
            } else {
                let error = new Error(responce.statusText);
                    error.response = responce;
                    throw error;
            }
        })
        .then( (data) => {
            let globalData = data.Global;
            let date = new Date(data.Date);
            let currentDate = `${date.getDate() + '-' + addZero(date.getMonth() + 1) + '-' + date.getFullYear()}`;
            let output = ' ';

                output += `
                    <tr>
                        <td>${currentDate}</td>
                        <td>${globalData.NewConfirmed}</td>
                        <td>${globalData.NewDeaths}</td>
                        <td>${globalData.NewRecovered}</td>
                        <td>${globalData.TotalConfirmed}</td>
                        <td>${globalData.TotalDeaths}</td>
                        <td>${globalData.TotalRecovered}</td>
                    </tr>
                `; 

            document.getElementById('data-block').innerHTML = output;
            arr = [globalData.NewConfirmed, globalData.NewDeaths, globalData.NewRecovered, globalData.TotalConfirmed, globalData.TotalDeaths, globalData.TotalRecovered];
            console.log(arr); // Здесь данные видны, получаем массив
            return arr;
        })
        .catch( (error) => {
            console.log(error.name);
            console.log('Error: ' + error.message);
            console.log(error.response);
        });
    }

    window.onload = getData('https://api.covid19api.com/summary');
    console.log(arr); // Тут данные не видны получаем пустой объект, заданный перед fetch
Ответить с цитированием