开发者问题收集

React Native 中从 firebase firestore 收集的数据在承诺之外返回未定义

2019-11-04
764

此方法应该返回用户列表,但返回一个空数组。当我在 forEach 循环内进行控制台日志时,它会打印数据,但不会在循环外部打印数据。

  get getAllUsers() {
    const usersList = [];
    firebase
      .firestore()
      .collection('users')
      .get()
      .then(snapshot => {
        snapshot.forEach(user => {
          usersList.push(user.data());
          console.log(user.data());
        });
      });
    return usersList; // Array [] or undefined when indexed
  }

在 Home.js 上,我在这里调用它。

  componentDidMount() {
    const list = fireStoreDB.getAllUsers;
    console.log(list);
  }

Array [] 是该方法的控制台日志,对象是来自 forEach 循环的控制台日志。

在此处输入图片说明

1个回答

您得到了一个空数组,因为您的函数是同步的,而 Firebase 返回的是一个异步的承诺。因此,在大多数情况下,您会先得到一个空数组,然后得到 Firebase 的响应。

试试这个:

 async getAllUsers() {
   const usersList = await firebase
      .firestore()
      .collection('users')
      .get()
      .then(snapshot => {
        return snapshot.map(user => user.data(););
      });
    return usersList;
  }

然后在 Home.js 中

componentDidMount() {
    fireStoreDB.getAllUsers().then(list => console.log(list));
  }
cccn
2019-11-04