下面是一个使用 async/await
和 p-limit
库处理100个API请求的示例。这个示例将展示如何限制并发请求的数量,以避免过载。
1. 安装 p-limit 库
首先,你需要安装 p-limit
库。如果你还没有安装,可以使用以下命令:
npm install p-limit
2. 示例代码
下面的代码将创建100个模拟的API请求,并使用 p-limit
来限制并发请求的数量。我们将同时请求5个API,待其中一个完成后再继续请求下一个。
const axios = require('axios');
const pLimit = require('p-limit');
// 设置并发限制
const limit = pLimit(5);
// 模拟API请求
const fetchData = async (id) => {
// 模拟网络延迟
await new Promise(resolve => setTimeout(resolve, Math.random() * 2000));
// 模拟 API 返回数据
return `数据 ${id}`;
};
// 创建一个请求的数组
const createRequests = (count) => {
return Array.from({ length: count }, (_, i) => limit(() => fetchData(i + 1)));
};
// 主函数
const main = async () => {
const requests = createRequests(100); // 创建100个请求
try {
const results = await Promise.all(requests); // 等待所有请求完成
console.log('所有请求结果:', results);
} catch (error) {
console.error('请求出现错误:', error);
}
};
// 执行主函数
main();
3. 代码解析
- 安装库: 使用
npm install p-limit
安装p-limit
和axios
(如果需要)。 - 限制并发: 使用
p-limit
创建一个限制为5的并发请求。 - 模拟API请求:
fetchData
函数模拟了一个API请求,使用setTimeout
模拟网络延迟。 - 创建请求:
createRequests
函数生成100个请求,使用limit
包装每个请求以确保并发限制。 - 主函数: 在
main
函数中调用Promise.all
等待所有请求完成,并处理结果或错误。
4. 运行代码
将以上代码保存到一个文件中(例如 index.js
),然后在终端中运行:
node index.js
你将看到输出的结果,表示所有请求的返回数据。
5. 注意事项
- 实际API: 在真实场景中,
fetchData
函数可以替换为实际的API请求,例如使用axios
进行HTTP请求。 - 错误处理: 确保在生产代码中妥善处理错误,例如通过
try...catch
块。