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

Node.js使用forEach处理异步请求后res.json返回空数组如何解决

问题根源

  • Array.prototype.forEach 本身不是异步函数,不会返回Promise对象,所以你写的await data.forEach(...) 实际没有等待任何异步操作完成,代码会直接走到res.json(array)这一步,此时所有Twilio的异步请求还没有返回结果,自然数组是空的。
  • 你在.then里能打印到数据,是因为回调是在异步请求完成后才执行,这时候res.json早就已经执行结束了。

修复方案

把遍历逻辑改成用map生成所有请求的Promise数组,再用Promise.all等待所有请求执行完成,统一处理结果:

const listParticipants = async (req, res) => {
    try {
        const { subActServiceSid, subActAuthToken, convoServiceSid} = req.user
        const subClient = require('twilio')(subActServiceSid, subActAuthToken)
        const { data } = req.body
        // 用map生成所有异步请求的Promise数组
        const promiseArr = data.map(convo => 
            subClient.conversations.services(convoServiceSid)
                .conversations(convo)
                .participants
                .list({limit: 20})
                // 直接返回需要的结构,不用额外push到外部数组
                .then(participants => ({ "sid": participants.sid }))
        )
        // 等待所有请求完成,拿到所有结果
        const resultArr = await Promise.all(promiseArr)
        res.json(resultArr)
    } catch (err) {
        // 错误捕获,避免请求出错时接口挂起
        res.status(500).json({ error: err.message })
    }
}

如果你的场景需要串行请求避免触发Twilio的频率限制,可以换成for of循环的写法:

const listParticipants = async (req, res) => {
    try {
        const { subActServiceSid, subActAuthToken, convoServiceSid} = req.user
        const subClient = require('twilio')(subActServiceSid, subActAuthToken)
        const { data } = req.body
        const resultArr = []
        for (const convo of data) {
            const participants = await subClient.conversations.services(convoServiceSid)
                .conversations(convo)
                .participants
                .list({limit: 20})
            resultArr.push({"sid": participants.sid})
        }
        res.json(resultArr)
    } catch (err) {
        res.status(500).json({ error: err.message })
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:27:02