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

如何将Promise.all()返回结果与每个Promise对应的ID关联

实现方案

核心逻辑是:Promise.all返回的结果顺序和传入的Promise数组顺序完全一致,你可以利用这个特性匹配layer的ID,更直接的方式是在创建每个请求Promise时就提前将ID和返回结果绑定。

修改后的完整代码

const promises = [];
const layers = req.body.layers;
const raw = "some data";

layers.forEach(layer => {
    const requestOptions = {
        method: 'POST',
        body: raw,
        headers: { 'Content-Type': 'application/json' }
    };
    // 每个请求Promise完成后直接返回绑定了ID的结果
    const layerPromise = fetch(layer.url, requestOptions)
        .then(response => response.json())
        // 把当前layer的id和返回数据打包成对象
        .then(data => ({
            id: layer.id,
            data: data
        }));
    promises.push(layerPromise);
});

Promise.all(promises)
    .then(resultArr => {
        // resultArr里的每一项都已经是{id:xxx, data:xxx}的结构,直接返回即可
        return res.send({ error: false, success: true, response: resultArr })
    })
    .catch(err => {
        return res.send({ error: err.message, success: false })
    })

可选优化:兼容单个请求失败的场景

如果需要避免单个请求失败导致整个Promise.all直接报错中断,可以给每个请求加单独的错误捕获:

const layerPromise = fetch(layer.url, requestOptions)
    .then(response => response.json())
    .then(data => ({
        id: layer.id,
        success: true,
        data: data
    }))
    .catch(err => ({
        id: layer.id,
        success: false,
        error: err.message
    }));

这样即使单个请求失败,也只会在对应ID的项里标记错误,不会影响其他请求的结果返回。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:21:02