javascript - 无法读取未定义的属性“forEach”-Firebase 和 Javascript
问题描述
我不断收到此错误:
未捕获(承诺中)类型错误:无法读取未定义的属性“forEach”
在尝试以 HTML 格式显示 Firebase Firestore 中的值时。它应该在页面上显示“doc.id”用户的名称,但我得到了前面显示的错误。这是我的 Firebase 数据库布局:Screenshot1
HTML 代码:
<div class="container">
<ul class="friends">
</ul>
</div>
Javascript代码:
firebase.auth().onAuthStateChanged(function(user) {
var uid = firebase.auth().currentUser.uid;
var ref = firebase.firestore().collection('users').doc(uid).collection('friends');
ref.get().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
var friends = doc.get('friends');
if (friends === true) {
console.log(uid, doc.id);
var docRef = db.collection('users').doc(doc.id);
docRef.get().then(snapshot => {
setupPosts(snapshot.docs)
})
const posts = document.querySelector('.friends');
const setupPosts = (data) => {
let html = '';
data.forEach(doc => {
const post = doc.data();
const li = `
<li>
<div class="title">${post.fullname}</div>
</li>
`;
html += li
})
posts.innerHTML = html;
}
}
})
})
});
解决方案
问题来自这里:
var docRef = db.collection('users').doc(doc.id);
docRef.get().then(snapshot => {
setupPosts(snapshot.docs)
})
该docRef.get()
调用检索单个文档,这意味着您返回一个DocumentSnapshot
没有forEach
方法的对象。
如果您要加载所有用户:
db.collection('users').get().then(snapshot => {
setupPosts(snapshot.docs)
})
如果您只想加载和设置一个文档:
var docRef = db.collection('users').doc(doc.id);
docRef.get().then(doc => {
setupPosts(doc)
})