js如何实现并发请求
使用 Promise.all 实现并发请求
Promise.all 可以接收一个 Promise 数组,等待所有 Promise 完成并返回结果数组。适用于需要同时发起多个请求并等待全部完成的场景。
const urls = ['url1', 'url2', 'url3'];
const requests = urls.map(url => fetch(url));
Promise.all(requests)
.then(responses => Promise.all(responses.map(res => res.json())))
.then(data => console.log(data))
.catch(error => console.error('请求失败:', error));
使用 Promise.allSettled 处理部分失败
Promise.allSettled 会等待所有 Promise 完成,无论成功或失败,返回每个 Promise 的状态和结果/原因。
Promise.allSettled(requests)
.then(results => {
results.forEach(result => {
if (result.status === 'fulfilled') {
console.log('成功:', result.value);
} else {
console.log('失败:', result.reason);
}
});
});
使用 async/await 简化代码
async/await 语法可以让并发请求代码更清晰易读。
async function fetchConcurrently(urls) {
try {
const responses = await Promise.all(urls.map(url => fetch(url)));
const data = await Promise.all(responses.map(res => res.json()));
return data;
} catch (error) {
console.error('请求出错:', error);
throw error;
}
}
控制并发数量的实现
当需要限制同时发起的请求数量时,可以使用以下方法:
async function limitedConcurrency(urls, limit) {
const results = [];
const executing = new Set();
for (const url of urls) {
const promise = fetch(url).then(res => res.json());
results.push(promise);
executing.add(promise);
promise.finally(() => executing.delete(promise));
if (executing.size >= limit) {
await Promise.race(executing);
}
}
return Promise.all(results);
}
使用 Axios 库实现并发
Axios 提供了方便的并发请求方法:

const axios = require('axios');
axios.all([
axios.get('url1'),
axios.get('url2')
])
.then(axios.spread((res1, res2) => {
console.log(res1.data, res2.data);
}))
.catch(error => console.error(error));
注意事项
- 浏览器对同一域名下的并发请求数有限制(通常6个)
- 大量并发请求可能对服务器造成压力
- 错误处理要完善,避免单个失败影响整体
- 考虑添加超时机制防止长时间等待






