我正在尝试使用 Firebase 文档中的所有用户。我怀疑我的问题是我对 javascript 理解的限制。
我尝试过使用和不使用异步/调度模式,但没有成功
const getUsers = () => {
database.collection('users').onSnapshot(docs => {
const users = [];
docs.forEach(doc => {
users.push({
...doc.data(),
id: doc.id,
ref: doc.ref,
});
});
return users;
});
};
let users = getUsers();
users &&
users.map(user => {
console.log('name: ', user.displayName);
});
最终,我想循环访问每个用户
最佳答案
正如 @GazihanAlankus 所解释的,由于对 Firestore 数据库的查询是异步操作,因此您需要在函数中返回 Promise,方法是使用 get()
方法如下:
const getUsers = () => {
return //Note the return here
database
.collection('users')
.get()
.then(querySnapshot => {
const users = [];
querySnapshot.forEach(doc => {
users.push({
...doc.data(),
id: doc.id,
ref: doc.ref
});
});
return users;
});
};
然后你需要按如下方式调用它:
getUsers().then(usersArray => {
console.log(usersArray);
usersArray.map(user => {
console.log('name: ', user.displayName);
});
});
因为该函数返回一个 Promise,请参阅 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then 。
<小时/>您可以进行以下测试,查看 console.log() 的执行顺序以及第二个 console.log()
在控制台中打印的内容:
getUsers().then(usersArray => {
console.log(usersArray);
usersArray.map(user => {
console.log('name: ', user.name);
});
});
console.log(getUsers());
关于javascript - 如何迭代 firebase get 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55984583/