TypeError: doc.数据不是函数



错误信息

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.

最新更新