【问题标题】:Axios - Simple way of querying and storing paginated response dataAxios - 查询和存储分页响应数据的简单方法
【发布时间】:2019-12-09 18:57:05
【问题描述】:

我有一个基本的异步函数,它使用 Axios 检索用户列表。我正在调用的 Discourse API 的响应被分页以包含每页 50 个用户 - 我需要调用相同的调用 5 次以获取所有用户,如下面的脚本所示.. 唯一更改的参数是 &page=

const [one, two, three, four, five] = await Promise.all([
    axios.get(`https://meta.discourse.org/directory_items.json?order=days_visited&page=0&period=all`),
    axios.get(`https://meta.discourse.org/directory_items.json?order=days_visited&page=1&period=all`),
    axios.get(`https://meta.discourse.org/directory_items.json?order=days_visited&page=2&period=all`),
    axios.get(`https://meta.discourse.org/directory_items.json?order=days_visited&page=3&period=all`),
    axios.get(`https://meta.discourse.org/directory_items.json?order=days_visited&page=4&period=all`)
  ]);

var users_array = one.data.directory_items.concat(two.data.directory_items, three.data.directory_items, four.data.directory_items, five.data.directory_items)

虽然这可行,但似乎很麻烦,我想知道是否有更简洁有效的方法来做到这一点?

【问题讨论】:

  • 如果你这样做,你怎么知道你会得到所有的用户?如果随着时间的推移更多,如果更少怎么办?如果你真的想加载所有数据,你应该运行一个循环,直到你确定你有所有页面......

标签: javascript axios concat


【解决方案1】:

你可以这样做:

// create Array containing all calls
const calls = [...Array(5).keys()].map(x => 
axios.get(`https://meta.discourse.org/directory_items.json?order=days_visited&page=${x}&period=all`)
)

// This will ensure that all api calls happen parallely
const [one, two, three, four, five] = await Promise.all(calls);

var users_array = one.data.directory_items.concat(two.data.directory_items, three.data.directory_items, four.data.directory_items, five.data.directory_items)

【讨论】:

  • @ogot 如果对您有帮助,请考虑accepting 回答
猜你喜欢
  • 2015-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 2019-03-11
相关资源
最近更新 更多