如何在Node.js中同时调用数组中的多个URL
并行调用多个API接口的实现方案
原来的map遍历只是逐个发起请求,但如果要统一管理所有请求的结果、确保并行执行并处理整体成功/失败状态,用Promise.all()是标准解决方案。
你的URL数组
"ResponseServer": [ "https://ResponseServer1/home/", "https://ResponseServer2/home/", "https://ResponseServer3/home/" ]
1. 基础并行实现(全成功才返回结果)
// 把每个接口请求转换成Promise对象,组成任务数组 const requestTasks = ResponseServer.map(url => axios.post(url, data)); // 用Promise.all并行执行所有请求 Promise.all(requestTasks) .then(allResponses => { // 所有请求成功时,allResponses是每个接口的响应结果数组 allResponses.forEach((res, idx) => { console.log(`第${idx+1}个接口返回数据:`, res.data); }); }) .catch(error => { // 只要有一个请求失败,就会触发这里 console.error('某个接口请求失败:', error); });
2. async/await写法(更直观)
async function sendParallelRequests() { try { const requestTasks = ResponseServer.map(url => axios.post(url, data)); const allResponses = await Promise.all(requestTasks); // 处理所有成功响应 allResponses.forEach((res, idx) => { console.log(`接口${idx+1}结果:`, res.data); }); } catch (err) { console.error('请求出错:', err); } } // 调用执行 sendParallelRequests();
3. 允许部分请求失败的场景
如果希望不管接口成功还是失败,都能拿到每个请求的结果,改用Promise.allSettled():
const requestTasks = ResponseServer.map(url => axios.post(url, data)); Promise.allSettled(requestTasks) .then(results => { results.forEach((result, idx) => { if (result.status === 'fulfilled') { console.log(`接口${idx+1}成功:`, result.value.data); } else { console.log(`接口${idx+1}失败:`, result.reason.message); } }); });
注意:你原来代码里的变量名Resposnserver有拼写错误(少了字母e),建议修正避免后续bug。
内容的提问来源于stack exchange,提问作者maranR
相关产品推荐
相关产品推荐

