javascript - 使用 axios 递归获取数据并链接结果

标签 javascript promise axios

我有一个模式 http://www.data.com/1 的 url,其中末尾的 1 可以一直运行到一个未预定义的数字。它返回一个数组。我需要将我得到的所有数组连接成一个。

我的策略是递归地执行 get-request,直到收到 404 错误,然后返回结果。

var returnArray = [];

function getData(count){
let p = axios.get(`http://www.data.com/${count}`).then(function(response){
  returnArray = returnArray.concat(response.data);
  return getData(count +1);
}
).catch(function() {
    Promise.resolve(returnArray);
}
)};

但是,当我实现此函数时,我的结果是未定义的。

getData(1).then((response) => console.log(response))

最好的方法是什么?

最佳答案

getData内,您没有返回promise,因此函数立即退出并返回未定义的值。 所以,而不是:

let p = axios.get(`http://www.data.com/${count}`).then(function(response){

用途:

return axios.get(`http://www.data.com/${count}`).then(function(response){

编辑:正如 Bergi 指出的,您还需要在 catch 处理程序中返回 returnArray,因此不要:

Promise.resolve(returnArray);

用途:

return returnArray;

完整代码如下:

var returnArray = [];

function getData(count){
  return axios.get(`http://www.data.com/${count}`).then(function(response){
    returnArray = returnArray.concat(response.data);
    return getData(count +1);
  }
  ).catch(function() {
    return returnArray;
  }
)};

关于javascript - 使用 axios 递归获取数据并链接结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49839831/

相关文章:

javascript - 在窗口调整大小时设置最小高度和最小宽度

javascript - 对 html2canvas 的 SVG 支持

javascript - Rhino 可以解析 HTML 文件吗

javascript - 提供 Promise 作为模块的导出是否是 Node.js 中异步初始化的有效模式?

javascript - 如果使用 Redux 从 Firebase 获取数据,如何显示事件指示器

javascript - 如何在 Google map 上搜索多边形坐标?

javascript - Ajax从函数获取验证,然后将响应传递给另一个ajax?

javascript - 如何仅在 Promise 完成后才执行函数?

javascript - 处理和解析 json 数据到 React 组件

javascript - 如何使用 API 内部的 API URL 将对象添加到数组中?