Firebase获取请求返回空数组?

时间:2020-05-16 19:02:12

标签: javascript arrays json firebase debugging

我认为这可能只是我的逻辑上的一个错误,但是我不确定问题出在哪里,我正在寻求调试帮助。我正在使用Firebase Cloud Firestore。我正在尝试通过我的“跟随”集合进行查询,以返回键“ senderHandle”等于参数句柄的所有数据,然后将该数据推入空数组followData。然后,遍历每个followData并对“ posts”集合进行文档查询调用。然后,遍历“ posts”集合中返回的每个文档,并将每个数据推送到空数组“ posts”中。

当我尝试返回posts数组时,尽管它返回空值。我的总体目标是让所有使用params句柄的用户,遍历每个用户以获取其帖子,然后将其帖子推入一个空数组。

功能代码:

// fetch home-specific posts (of users following)
exports.getHomePosts = (req, res) => {
  let posts = [];
  let followData = [];
  // get following users
  const followDocument = db
    .collection("follows")
    .where("senderHandle", "==", req.params.handle);

  followDocument
    .get()
    .then((data) => {
      if (data.query.size == 0) {
        return res.status(400).json({ error: "Not following any users" });
      } else {
        data.forEach((doc) => {
          followData.push(doc.data());
        });
      }
    })
    .then(() => {
      followData.forEach((follow) => {
        db.collection("posts")
          .where("userHandle", "==", follow.receiverHandle)
          .where("location", "==", "explore")
          .get()
          .then((data) => {
            data.forEach((doc) => {
              posts.push({
                postId: doc.id,
                body: doc.data().body,
                userHandle: doc.data().userHandle,
                createdAt: doc.data().createdAt,
                commentCount: doc.data().commentCount,
                likeCount: doc.data().likeCount,
                userImage: doc.data().userImage,
              });
            });
          });
      });
      return res.json(posts);
    })
    .catch((err) => {
      res.status(500).json({ error: err.message });
    });
};

followData返回:

[
    {
        "receiverHandle": "John Doe",
        "senderHandle": "bear"
    },
    {
        "senderHandle": "bear",
        "receiverHandle": "Yikies"
    },
    {
        "receiverHandle": "bear",
        "senderHandle": "bear"
    },
    {
        "receiverHandle": "anon",
        "senderHandle": "bear"
    },
    {
        "senderHandle": "bear",
        "receiverHandle": "BigYikes"
    }
]

1 个答案:

答案 0 :(得分:1)

此代码存在多个问题。

  1. waiting promise尚未得到解决。
  2. 多个returns语句
  3. 您不会创建像postsfollowData这样的全局数组[您可以在之后返回以进行下一次回调]

代码:

// fetch home-specific posts (of users following)

exports.getHomePosts = (req, res) => {
  const followDocument = db
    .collection("follows")
    .where("senderHandle", "==", req.params.handle);

  followDocument
    .get()
    .then((data) => {
      if (data.query.size == 0) {
        throw new Error("NOT_FOUND");
      } else {
        return data.map((doc) => doc.data());
      }
    })
    .then((followData) => {
      const promises = followData.map((follow) => {
        return db
          .collection("posts")
          .where("userHandle", "==", follow.receiverHandle)
          .where("location", "==", "explore")
          .get();
      });
      Promise.all(promises).then((results) => {
        const posts = results
          .map((data) => {
            return data.map((doc) => ({
              postId: doc.id,
              body: doc.data().body,
              userHandle: doc.data().userHandle,
              createdAt: doc.data().createdAt,
              commentCount: doc.data().commentCount,
              likeCount: doc.data().likeCount,
              userImage: doc.data().userImage,
            }));
          })
          .flat();
        return res.json(posts);
      });
    })
    .catch((err) => {
      if (err.message === "NOT_FOUND") {
        return res.status(400).json({ error: "Not following any users" });
      }
      res.status(500).json({ error: err.message });
    });
};