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

如何在JavaScript中并行调用API并同时修改响应结果

如何在axios.all并行请求结果中添加对应映射值的自定义属性

我想用axios.all发起大量并行API调用,同时给每个响应结果添加一个newProperty属性,值取映射数组里对应的元素,让返回的对象包含这个额外属性。

原代码如下:

const url='https://jsonplaceholder.typicode.com/posts/'
const arr=[1,2]

const fn = async () => {
    const obj = (await axios.all(arr.map(el=>axios(url+el)))).map((item)=>item.data)
    console.log(obj)
}
fn()

期望得到的响应格式示例:

{
    "newProperty": 1,
    "userId": 1,
    "id": 1,
    "title": "sunt aut facere repellat",
    "body": "quia et suscipit\nsuscipit recusandae consequuntur"
}

解决方法

方法一:请求阶段绑定原元素与响应

在发起每个请求时,通过then把原数组元素和响应数据打包在一起,后续直接解构合并即可:

const url='https://jsonplaceholder.typicode.com/posts/'
const arr=[1,2]

const fn = async () => {
    // 每个请求返回包含原元素和响应数据的Promise
    const requests = arr.map(el => 
        axios(url + el).then(res => ({ el, data: res.data }))
    );
    // 等待所有请求完成后,合并自定义属性与响应数据
    const result = (await axios.all(requests)).map(({ el, data }) => ({
        newProperty: el,
        ...data
    }));
    console.log(result);
}
fn()

方法二:利用索引对应原数组元素

因为axios.all会保证响应数组的顺序和请求数组的顺序完全一致,所以可以直接通过索引从原数组中取对应值:

const url='https://jsonplaceholder.typicode.com/posts/'
const arr=[1,2]

const fn = async () => {
    const responses = await axios.all(arr.map(el => axios(url + el)));
    // 遍历响应时通过索引匹配原数组元素
    const result = responses.map((res, index) => ({
        newProperty: arr[index],
        ...res.data
    }));
    console.log(result);
}
fn()

两种方法都能实现需求,第一种更稳妥(避免特殊情况下的顺序问题),第二种写法更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:33:15