如何在地图功能中从Firestore获取数据

时间:2019-02-09 19:05:51

标签: reactjs firebase react-redux google-cloud-firestore

当我通过对象映射以查看用户是否在线时,我想从Firestore中检索数据。我不确定如何检索数据。

当我console.log userInLobby(如下所示)时,我得到了[Promise]数组。

如果我尝试在Firebase调用之前设置一个变量,则无法在.then()函数内部更改该变量

 const userInLobby = users ? (
  users.map(userdata => {
    if (userdata.status === "online") {
      var user =
        firebase.firestore().collection("users").doc(userdata.id).get().then(user => {
          return { username: user.data().username };
        })
      return user
    }
    else {
      return null;
    }
  })
) : (null);

如何访问[Promise]或还有另一种方式来构造此代码?

1 个答案:

答案 0 :(得分:2)

您似乎正在尝试在map函数内部运行异步函数(firebase.firestore().collection("users").doc(userdata.id).get())。

那行不通。 map函数只会返回一个promise数组。

您需要做的就是在所有的诺言归还时使用Promise.all()获得结果。

const userInLobby = users
  && users.map(userdata => {
      if (userdata.status === 'online') {
        return firebase
          .firestore()
          .collection('users')
          .doc(userdata.id)
          .get()
      } 
    })

Promise.all(userInLobby).then(values => console.log(values))