如何遍历帖子数组并根据用户ID获取对应用户数据?
问题分析与修复方案
原代码存在的问题
- 遍历帖子数组时,map回调未接收单个帖子参数,导致
id、data.userId等变量无定义 - 同时使用
await和.then()/.catch(),语法冗余且易引发逻辑混乱 - 请求URL中的用户ID未正确从当前帖子中提取
- 未处理map生成的Promise数组,无法确保所有请求完成后再执行后续逻辑
- 请求体的
userId取值错误,应从当前遍历的帖子对象中获取
修正后的代码实现
const getUsers = async () => { // 存储所有用户数据的数组 const userList = []; // 遍历帖子数组,每个帖子对象作为参数传入 const requestPromises = data.map(async (post) => { try { const res = await axios({ method: "POST", withCredentials: true, // 从当前帖子中获取用户ID,替换成你实际的字段名(比如post._id或post.userId) url: `https://droplikebackend.herokuapp.com/api/user/get/${post._id}`, data: { userId: post._id // 同样使用当前帖子的用户ID } }); // 将获取到的用户数据存入数组 userList.push(res.data); console.log(res.data); } catch (err) { console.error(`获取用户ID ${post._id} 数据失败:`, err); } }); // 等待所有请求完成 await Promise.all(requestPromises); // 所有请求完成后可以处理userList console.log("所有用户数据获取完成:", userList); };
优化建议
- 如果帖子数量较多,建议对请求做限流处理(比如每次只发5个请求),避免触发后端接口的频率限制
- 可以考虑在后端实现批量查询接口,一次性传入多个用户ID,减少HTTP请求次数,提升性能
- 若不需要同时发起所有请求,可改用
for...of循环串行执行请求,降低服务器压力
内容的提问来源于stack exchange,提问作者crayonne
相关产品推荐
相关产品推荐

