使用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
相关产品推荐
相关产品推荐

