首页 > 解决方案 > 无法读取未定义的属性“forEach”-Firebase 和 Javascript

问题描述

我不断收到此错误:

未捕获(承诺中)类型错误:无法读取未定义的属性“forEach”

在尝试以 HTML 格式显示 Firebase Firestore 中的值时。它应该在页面上显示“doc.id”用户的名称,但我得到了前面显示的错误。这是我的 Firebase 数据库布局:Screenshot1

截图2

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;

                    }
                }
            })
        })
            });

标签: javascripthtmlfirebasegoogle-cloud-firestore

解决方案


问题来自这里:

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

推荐阅读