Javascript 为什么不从firestore获取此元素?

Javascript 为什么不从firestore获取此元素?,javascript,firebase,vue.js,google-cloud-firestore,Javascript,Firebase,Vue.js,Google Cloud Firestore,代码:(我99%确定问题出在挂载方法中) 从“../components/TasksNavbar.vue”导入TasksNavbar 从“../components/SingleTask.vue”导入SingleTask 从“../components/TaskFilterNav.vue”导入FilterNav 从“../components/Navbar.vue”导入导航栏 从“vue”导入{computed} 从“firebase/app”导入firebase 导入“firebase/au

代码:(我99%确定问题出在挂载方法中)


从“../components/TasksNavbar.vue”导入TasksNavbar
从“../components/SingleTask.vue”导入SingleTask
从“../components/TaskFilterNav.vue”导入FilterNav
从“../components/Navbar.vue”导入导航栏
从“vue”导入{computed}
从“firebase/app”导入firebase
导入“firebase/auth”
导入“firebase/firestore”
导出默认值{
姓名:'家',
组件:{SingleTask、TasksNavbar、FilterNav、Navbar},
数据(){
返回{
任务:[],
当前:“全部”
};
},
安装的(){
var docRef=firebase.firestore().collection('users').doc(firebase.auth().currentUser.uid)
docRef.get(“任务”)。然后(函数(任务){
if(task.exists){
this.tasks.push(task.data())
}
}).catch(函数(err){
console.log(错误消息)
})
},
文件结构: 集合:用户->文档名为用户id的用户的文档->任务数组作为一个字段,其中包含任务


任务已正确保存到firestore,但无法正确获取任务。


在我写答案的时候,你编辑了你的问题

docRef.get("tasks").forEach(...)

但它不会改变答案的内容


docRef
是一个,它的
get()
方法是异步的,并返回一个
DocumentSnapshot
。您将此方法与
DocumentSnapshot
的方法混为一谈(顺便说一句,它不是异步的)

您需要执行以下操作:

var docRef = firebase.firestore().collection('users').doc(firebase.auth().currentUser.uid)

docRef.get().then(doc => {
    if (doc.exists) {
        const tasksArray = doc.get("tasks");
        tasksArray.forEach(...);
    } else {
        // doc.data() will be undefined in this case
        console.log("No such document!");
    }
}).catch(function(error) {
    console.log("Error getting document:", error);
});

此外,如前所述,您应该注意,
firebase.auth().currentUser.uid
可能返回
null
,因为
firebase.auth()
返回的对象可能处于中间状态,例如初始化

您需要确保
firebase.auth().currentUser
不为空

根据具体的登录流程,您可能需要将代码放入Vue.js
mounted
hook中的
onAuthStateChanged
observer:

mounted() {
    firebase.auth().onAuthStateChanged(user => {
      if (user) {
        // Put your code here => user is not null
        var docRef = firebase.firestore().collection('users').doc(user.uid)
    
        docRef.get().then(doc => {...});
        // ....

       }
    });
}

“无法正确获取它们”是很难帮助的。如果在调试器中逐行遍历代码会发生什么?哪一行没有完成预期的操作?@FrankvanPuffelen docRef.get(“tasks”).forEach(函数(task){if(task.exists){this.tasks.push(task.data())}这些行
var docRef = firebase.firestore().collection('users').doc(firebase.auth().currentUser.uid)

docRef.get().then(doc => {
    if (doc.exists) {
        const tasksArray = doc.get("tasks");
        tasksArray.forEach(...);
    } else {
        // doc.data() will be undefined in this case
        console.log("No such document!");
    }
}).catch(function(error) {
    console.log("Error getting document:", error);
});
mounted() {
    firebase.auth().onAuthStateChanged(user => {
      if (user) {
        // Put your code here => user is not null
        var docRef = firebase.firestore().collection('users').doc(user.uid)
    
        docRef.get().then(doc => {...});
        // ....

       }
    });
}