array.push 方法不适用于我的 node.js 应用程序

array.push method not working for my node.js application

router.get("/timeline/:userId", async (req, res) => {
 try {
       
//creating friend posts object

const friendPosts = await Promise.all(
  currentUser.followings.map((friendId) => {
    return Post.find({ userId: friendId });
  })
);

var newFriendPosts = [];

friendPosts.map(async (friend) => {
  friend.map(async (post) => {
    const { profilePicture, username } = await User.findById(post.userId);
    const newFriendPostsObject = {
      ...post.toObject(),
      profilePicture,
      username,
    };
    console.log(newFriendPostsObject);

    newFriendPosts.push(newFriendPostsObject);
  });
});

console.log(newFriendPosts);
// console.log(newUserPosts);
res.status(200).json(newUserPosts.concat(...newFriendPosts));
} catch (err) {
res.status(500).json(err);
 }
});

所以对象值在 console.log(newFriendPostsObject) 中是正确的,但是当我将它推入数组时 newFriendPosts = [];它在 console.log(newFriendPosts);

中显示空数组

下面是我从数据库中获取用户详细信息的地方(数据库在 MongoDB 中):-

const { profilePicture, username } = await User.findById(post.userId);

.map() async 不知道。因此,它只是继续 returns 一系列承诺。同时,您的代码从不等待这些承诺,因此您在任何 .push() 操作具有 运行 之前尝试使用 newFriendPosts.push() 工作正常 - 您只是在实际调用 .push() 之前尝试使用数组。如果添加适当的 console.log() 语句,您将看到 newFriendPosts.push(...) 出现在 console.log(newFriendPosts);.

之后

最简单的解决方法是将两个 .map() 语句更改为常规 for 循环,因为 for 循环是 async 感知的,并且会暂停循环 await.

router.get("/timeline/:userId", async (req, res) => {
    try {
        //creating friend posts object
        const friendPosts = await Promise.all(
            currentUser.followings.map((friendId) => {
                return Post.find({ userId: friendId });
            })
        );

        const newFriendPosts = [];

        for (let friend of friendPosts) {
            for (let post of friend) {
                const { profilePicture, username } = await User.findById(post.userId);
                const newFriendPostsObject = {
                    ...post.toObject(),
                    profilePicture,
                    username,
                };
                newFriendPosts.push(newFriendPostsObject);
            }
        }

        console.log(newFriendPosts);
        res.status(200).json(newUserPosts.concat(...newFriendPosts));
    } catch (err) {
        res.status(500).json(err);
    }
});

此代码中的一个谜是 newUserPosts 似乎没有在任何地方定义。