Javascript 为什么不从firestore获取此元素?
代码:(我99%确定问题出在挂载方法中)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
从“../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.jsmounted
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 => {...});
// ....
}
});
}