开发者问题收集

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

2019-02-09
2116

我想通过对象映射来查看用户是否在线,从而从 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个回答

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

这行不通。map 函数只会返回一个承诺数组。

您需要做的是使用 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))

Josh Pittman
2019-02-09