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

Promise.all未等待map函数resolve导致Express获取用户动态接口异常

问题原因与修复方案

你的代码核心问题出在Promise.all返回值的结构和查询方式的潜在问题,按以下步骤排查修复即可:

  • 嵌套数组结构错误
    Post.find()查询返回的是单用户的帖子数组,经过map调用后传给Promise.all的是多个查询Promise,最终resolve得到的friendPosts是二维数组(结构为[[用户1的所有帖子], [用户2的所有帖子], ...]),直接和一维的userPosts拼接会得到嵌套结构,不符合预期。
    修复方法:拼接时展开二维数组,或者改用更高效的批量查询
    // 方法1:展开后拼接
    res.status(200).json(userPosts.concat(...friendPosts))
    
    // 方法2:直接批量查询(更推荐,性能更高避免并发问题)
    // 替换原Promise.all那段代码即可,返回的直接是一维好友帖子数组
    const friendPosts = await Post.find({ userId: { $in: currentUser.followings } })
    
  • 错误定位方法
    如果修改后还是有问题,可以在catch块中添加错误打印,查看具体的报错信息:
    catch (err) {
      console.error('接口报错详情:', err)
      res.status(500).json(err);
    }
    
    常见的额外问题包括:currentUser.followings中存在不符合MongoDB ObjectId格式的无效值、数据库连接数不足导致并发查询超时,根据打印的错误信息针对性处理即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:57:03