Асинхронные / ожидающие функции - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь получить данные из URL, но не уверен, что я делаю неправильно. Когда я console.log возвращаю файл result.data, я получаю Обещание, но когда я консоль.log result.data внутри своей функции, я получаю все данные. Вот мой код:

async function getTeams() {
    const result = await axios({
        method: "get",
        url: 'http://api.sportradar.us/ncaafb-t1/teams/FBS/2018/REG/standings.json?api_key=sg8pf7bdjt5u8ueedttyytwx',
    });
    console.log(result.data);
    return result.data;
}
console.log(getTeams());

Я не уверен, что мне следует поступить иначе, чтобы получить выполненное обещание.

РЕДАКТИРОВАТЬ: мне нужно было использовать getTeams (). Then () с обратными вызовами, чтобы работать лучше. Однако сейчас я сталкиваюсь с проблемой хранения данных внутри .then (), к которым я могу получить доступ в глобальных переменных. Мой код теперь выглядит так:

async function getTeams() {
    const result = await axios({
        method: "get",
        url: 'http://api.sportradar.us/ncaafb-t1/teams/FBS/2018/REG/standings.json?api_key=sg8pf7bdjt5u8ueedttyytwx',
    });
    return result.data;
}
let teams = [];
getTeams().then(data => {
    let acc = data.division.conferences[0];
    for (let i = 0; i < acc.teams.length; i++) {
        teams.push(acc.teams[i]);
    }
})

1 Ответ

1 голос
/ 04 ноября 2019

Асинхронные функции всегда возвращают обещание. В момент регистрации возвращаемого значения асинхронная операция еще не завершена - элемент управления должен вернуться к главному циклу JavaScript, прежде чем асинхронная операция может продолжиться.

Необходимо дождаться возвращенного обещания:

getTeams().then(console.log.bind(console));
...