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