Возврат данных вне асинхронного вызова axios - PullRequest
0 голосов
/ 01 июня 2018

Как мне вернуть значение stuff вне цикла for.Мне нужно сделать вызов API i количество раз и сохранить результат каждый раз.Возможно, где-то есть повторяющийся вопрос с ответом, но я не могу его найти.

function getResponse() {
    var stuff = []

    for (let i = 0; i < length; i++) {
        axios.get(url + i)
            .then(res => res.forEach(item => {
                stuff.push(item)
            }))
    }
    // How do I return stuff from this function ?
}

console.log(getResponse())

Я пытался заставить эту функцию делать только 1 вызов, а затем зацикливаться на другой функции, которая вызывает это, но я получаюcannot read property then of undefined.

1 Ответ

0 голосов
/ 01 июня 2018

Как мне вернуть данные из этой функции?

Вы не можете.Это как «Я хочу получить газету завтрашнего дня».Это тоже не сработает.Вы должны подождать до следующего дня, чтобы прочитать газету, или в вашем случае, пока все данные не поступят в браузер.Вы не можете вернуть данные напрямую, но Promise , который когда-нибудь доставит данные.В вашем случае вы можете использовать Promise.all, чтобы объединить массив обещаний в обещание, которое разрешается в массив:

function getResponse() {
  const promises = [];

  for (let i = 0; i < length; i++) {
    promises.push(axios.get(url + i));
  }

  return Promise.all(promises)
    .then(results => [].concat(...results));
}

Так что теперь, если вы сделаете:

console.log(getResponse())

Вы получитеОбещание.Чтобы получить фактические данные, вы должны подождать, пока данные не поступят:

getResponse().then(console.log);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...