错误信息
TypeError: doc.data is not a function
源代码state() {
myWallet: ''
},
getters: {
getMyWallet: state => state.myWallet.wallet,
},
mutations: {
getMyWallet(state, doc) {
state.myWallet = doc.data();
}
},
actions: {
async getMyWallet({ commit }) {
firebase.auth().onAuthStateChanged(user => {
const uid = user.email;
const db = firebase.firestore();
const doc = db
.collection('myData')
.where('uid', '==', uid)
.get()
commit('getMyWallet', doc);
});
},
}
对于.where ('uid','==', uid)的uid,新注册时的电子邮件地址作为一个值存储在firestore中。
.collection('myData')
.doc('Specific document ID')
.get()
commit('getMyWallet', doc);
如果您指定了一个特定的文档ID而不使用where,您可以获得相应的文档,但是如果您使用where子句,您将得到一个错误消息。
原因未知。
Postscript
↓SignUp.vue
methods: {
async signUp() {
await this.$store.dispatch('signUp', { username:this.username, email:this.email, password:this.password });
const db = firebase.firestore();
const user = firebase.auth().currentUser;
db.collection('myData').doc(user.uid).set({
uid: user.uid,
userName: user.displayName,
email: user.email,
myWallet: 300
});
this.$store.dispatch('getMyWallet', user.uid);
this.$router.push('/home');
}
}
↓store.js
state() {
myWallet: '',
},
getters: {
getMyWallet: state => state.myWallet.myWallet,
},
mutations: {
getMyWallet(state, doc) {
state.myWallet = doc.data();
console.log(doc.data())
}
},
actions: {
async getMyWallet({ commit }, uid) {
const db = firebase.firestore();
const doc = await db
.collection('myData')
.doc(uid)
.get();
commit('getMyWallet', doc);
}
}
当我按照上面的描述修改代码时,当我新注册并移动到主屏幕时显示了我的余额,但只有一个问题。
例如,如果您注销一次,并将'myWallet: 300'设置为1000日元,然后再次注册,则会显示之前的300日元。当我查询firestore和控制台时,它们的注册价格都是300日元。我不知道它为什么会这样。
错误信息TypeError: doc.data is not a function
意味着您的对象'doc'不是您认为应该是的类型。在使用firebase的情况下,它只是另一个对象…也许是一个包装器,或者是'where'返回一个对象列表?看一下'where'的文档以及它将返回什么类型的对象。
不过…
.collection('myData')
.where('uid', '==', uid)
.get()
commit('getMyWallet', doc);
//-- This code returns another object than 'doc' where the 'data' function does not exist.
.collection('myData')
.doc('Specific document ID')
.get()
commit('getMyWallet', doc);
//-- This code returns the intended object where the 'data' function exists.