在axios异步调用之外返回数据

问题描述 投票:0回答:2

如何在 for 循环之外返回

stuff
的值。我需要进行 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

javascript api asynchronous axios
2个回答
1
投票

如何从该函数返回内容?

你不能。就像“我想要明天的报纸”。那也行不通。您必须等到第二天才能阅读报纸,或者就您而言,直到所有数据都到达浏览器。你不能直接返回数据,而是一个 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);

0
投票

使用 while 循环而不是 for 循环,它对我有用

© www.soinside.com 2019 - 2024. All rights reserved.