You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从多组axios GET请求返回Promise并实现并行调用?

问题解决方法

你犯了一个没必要的错误:async函数本身就会自动返回Promise,完全不需要手动用new Promise包裹内部逻辑。你之前的报错,是因为在new Promise的回调函数(非async)里用了await,这才触发语法错误。

正确的修改方案

  1. 保留原getData的async函数逻辑,不需要加外层的new Promise,它本身返回的就是Promise。
  2. 你的期望main函数写法是对的,直接收集getData返回的Promise即可实现并行请求。

完整正确代码

getData函数(无需修改核心逻辑,仅优化错误处理)

async function getData(dataURI) {
    let getURI = dataURI;
    
    const config = {
      headers: {
        Authorization: `Bearer ${my-token-text}`,
      },
    };
    
    var finalData = [];

    // 循环请求直到没有nextLink
    while (getURI != null) {
        try {
            const getResult = await axios.get(getURI, config);
            if (getResult.status === 200) {
                const receivedData = getResult.data.value;
                finalData.push(...receivedData);
                
                // 检查是否有下一页链接
                if (Object.prototype.hasOwnProperty.call(getResult.data, 'nextLink')) {
                    getURI = getResult.data.nextLink;
                } else {
                    getURI = null;
                    return finalData;
                }
            }
        } catch (err) {
            console.error('请求出错:', err);
            // 抛出错误让Promise.allSettled捕获失败状态
            throw err;
            // 若想返回已获取的部分数据,可替换为:
            // break;
        }
    }
    return finalData.length > 0 ? finalData : null;
}

main函数(实现并行请求)

async function main() {
    const promisesArray = [];
    
    const URL_1 = 'abc.com/get1/data1';
    promisesArray.push(getData(URL_1));

    const URL_2 = 'abc.com/get2/data2';
    promisesArray.push(getData(URL_2));

    const results = await Promise.allSettled(promisesArray);
    console.log('所有请求完成: ', results);
    
    // 可遍历结果区分成功/失败
    results.forEach((result, index) => {
        if (result.status === 'fulfilled') {
            console.log(`请求${index+1}成功:`, result.value);
        } else {
            console.log(`请求${index+1}失败:`, result.reason);
        }
    });
}

并行原理说明

  • 调用getData(URL_1)时,函数会立即执行并发起第一个axios请求,同时返回一个Promise。
  • 紧接着调用getData(URL_2),同样立即执行并发起第二个请求,两个请求会并行处理。
  • Promise.allSettled会等待所有Promise完成(无论成功或失败),然后统一返回结果数组。

内容的提问来源于stack exchange,提问作者User7723337

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 05:25:38