无法读取未定义的属性“forEach”- Firebase和JavaScript

x8diyxa7  于 2023-06-28  发布在  Java
关注(0)|答案(1)|浏览(78)

我一直得到这个错误:
Uncatch(in promise)TypeError:无法读取未定义的属性“forEach”
尝试在HTML中显示Firebase Firestore中的值时。它应该在页面上显示“doc.id”用户的名称,但我得到了前面显示的错误。这是我的Firebase数据库布局:

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;

                    }
                }
            })
        })
            });
olmpazwi

olmpazwi1#

问题就出在这里:

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)
})

相关问题