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

使用axios时新数组poolList无数据,但console.log可正常打印返回数据

根因分析

你在Array.map的回调中使用了async函数,所有async函数执行后都会返回Promise对象,因此你得到的poolList是多个Pending状态的Promise组成的数组,并非接口返回的实际数据。res.send在map执行完成后就立刻触发,此时所有异步请求还未完成resolve,所以返回的poolList没有实际数据;而console.log写在await axios.get之后,只有请求完成后才会执行,因此能正常打印返回结果。

修复方案

使用Promise.all等待数组中所有Promise执行完成后再返回结果,修改后的代码如下:

router.get('/', async (req, res) => {
    const pools = [
        'pool1',
        'pool2',
    ]
    // 新增await Promise.all包裹map逻辑
    const poolList = await Promise.all(pools.map(async pool => {
        const response = await axios.get(`https://example.com/pools/${pool}/summary.json`)
        console.log(response)
        return {
            response
        }
    }))
    res.send({
        poolList
    })
})
扩展说明

如果允许单个请求失败不影响整体返回,可以将Promise.all替换为Promise.allSettled,后续再自行过滤成功的请求结果即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:15:01