Node 中并行异步的多个分页 GET API 调用

作者:编程家 分类: typescript 时间:2025-07-17

使用Node.js进行并行/异步的多个分页GET API调用是一种常见的操作。这种方法允许我们同时发起多个API请求,以加快数据获取的速度。在本文中,我们将介绍如何使用Node.js进行并行的API调用,并提供一个案例代码来说明这个过程。

什么是并行/异步的多个分页GET API调用?

在许多情况下,我们需要从一个API中获取大量的数据,并且这些数据分页显示。每一页的数据可能需要单独的GET请求来获取。如果我们按顺序发送这些请求,那么获取所有数据可能需要很长时间。而使用并行/异步的方法,我们可以同时发送多个请求,从而加快数据获取的速度。

案例代码

让我们以一个获取GitHub用户存储库列表的案例为例。GitHub API允许我们使用分页来获取用户存储库列表。每页最多可以显示100个存储库。我们可以通过更改分页参数来获取不同页的数据。

首先,我们需要安装`axios`和`async`这两个npm包。`axios`用于发送HTTP请求,而`async`用于处理并行任务。

javascript

npm install axios async

接下来,我们可以编写代码来获取多个分页的数据。我们将使用GitHub API的`users/{username}/repos`端点来获取存储库列表。下面是一个示例代码:

javascript

const axios = require('axios');

const async = require('async');

const username = 'your_username';

const perPage = 100;

// 获取总页数

async function getTotalPages() {

const response = await axios.get(`https://api.github.com/users/${username}/repos?per_page=${perPage}&page=1`);

const totalCount = response.headers['x-total-count'];

return Math.ceil(totalCount / perPage);

}

// 获取每一页的数据

async function getPage(page) {

const response = await axios.get(`https://api.github.com/users/${username}/repos?per_page=${perPage}&page=${page}`);

return response.data;

}

// 并行获取多个分页的数据

async function getAllPages() {

const totalPages = await getTotalPages();

const pageNumbers = Array.from(Array(totalPages).keys()).map((n) => n + 1);

const repositories = await async.concat(pageNumbers, async (page) => {

const data = await getPage(page);

return data;

});

return repositories;

}

// 执行代码

getAllPages().then((repositories) => {

console.log(repositories);

}).catch((error) => {

console.error(error);

});

在这个案例中,我们首先定义了`getTotalPages`函数来获取总页数。我们发送一个GET请求到`users/{username}/repos`端点,并从响应头中获取`x-total-count`字段来获得总存储库数量。通过除以每页的数量,我们可以计算出总页数。

然后,我们定义了`getPage`函数来获取每一页的数据。我们发送一个GET请求到相同的端点,并使用不同的页码来获取不同的页数据。

最后,我们定义了`getAllPages`函数来并行获取多个分页的数据。我们首先获取总页数,然后创建一个包含所有页码的数组。然后,我们使用`async.concat`函数来并行地发送多个请求,并将所有页的数据连接在一起。

最后,我们执行`getAllPages`函数,并在获取到数据后打印出来。

通过使用Node.js进行并行/异步的多个分页GET API调用,我们可以加快数据获取的速度。在本文中,我们介绍了如何使用Node.js进行这样的操作,并提供了一个案例代码来帮助理解。希望这篇文章对你有所帮助!