【问题标题】:How can I grab the author info for each post when grabbing all posts?抓取所有帖子时如何获取每个帖子的作者信息?
【发布时间】:2017-01-20 21:45:35
【问题描述】:

当发表帖子或评论时,用户作者只是通过 ID 添加。这样,当用户决定更新他们的头像/姓名等时,我不必找到他们曾经发布的每条帖子和评论并在那里更新。

当我只是抓取帖子并将它们作为有效负载传递(没有作者信息)时,它工作正常,没有错误:

export const fetchPostsByNewest = () => {
  return (dispatch) => {
    firebase.database().ref('/social/posts')
      .on('value', snapshot => {
          dispatch({ type: NEW_POSTS_FETCH_SUCCESS, payload: snapshot.val() });
       };
    };
};

我尝试过像这样获取作者信息,但我无法解决如何仅在一个有效负载中完成所有操作:

export const fetchPostsByNewest = () => {
  return (dispatch) => {
    firebase.database().ref('/social/posts').on('value', postSnapshot => {
        const posts = postSnapshot.val();

        const postsAsArray = Object.keys(posts).map(postId => posts[postId]);
        postsAsArray.forEach(post => {
            const postWithUser = {};

            Object.keys(post).forEach(key => {
              postWithUser[key] = post[key];
            });

            const userId = post.author;

            firebase.database().ref(`/social/users/${userId}`).once('value', userSnapshot => {
              const profile_info = userSnapshot.val();

              postWithUser.profile_info = profile_info.profile_info;

              console.log(postWithUser);

                dispatch({ type: NEW_POSTS_FETCH_SUCCESS, payload: postWithUser });
            });
        });
      });
  };
};

这些是我从上面得到的控制台日志:

这似乎带来了正确的数据,但我得到了这个错误:

你能给我一些建议吗,这让我发疯了!

谢谢!

【问题讨论】:

    标签: javascript reactjs firebase react-native redux


    【解决方案1】:

    根据 Firebase API once() 返回一个 Promise,因此您的代码应该或多或少类似于:

    firebase.database().ref(`/social/users/${userId}`).once('value').then(userSnapshot => {
      const profile_info = userSnapshot.val();
      postWithUser.profile_info = profile_info.profile_info;
    
      console.log(postWithUser);
    
      dispatch({ type: NEW_POSTS_FETCH_SUCCESS, payload: postWithUser });
    });
    

    这是对文档的引用:https://firebase.google.com/docs/reference/node/firebase.database.Reference#once

    【讨论】:

      猜你喜欢
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      相关资源
      最近更新 更多