【发布时间】:2019-11-26 18:20:36
【问题描述】:
我正在使用 Vue.js、Vuex 和 Firebase 构建应用程序。在这个应用程序中,来自 Firestore 数据库的数据被更新为突变状态。当前形式的应用程序似乎可以正常工作,因为状态随后通过 getters 方法返回到模板。但是,据我了解,突变是同步的,而 Promise (.then) 是异步的。因此, .then 承诺不应该在突变内部。那么为什么这个应用程序仍然可以正常执行呢?重新配置突变以使 FB 数据在没有承诺的情况下更新到状态的最佳方法是什么?或者甚至有必要改变这一点?这是我的 Vuex 代码。谢谢!
import Vue from 'vue'
import Vuex from 'vuex'
import firebase from 'firebase'
import db from '@/firebase/init'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
items: null
},
getters: {
getItems: state => {
return state.items
}
},
mutations: {
setAllUser: state => {
const items = []
db.collection('users').get()
.then(snapshot => {
snapshot.forEach(doc => {
let userData = doc.data()
userData.id = doc.id
items.push(userData)
})
state.items = items
})
},
actions: {
setAllUser: context => {
context.commit('setAllUser')
}
}
})
**SOLUTION**
import Vue from 'vue'
import Vuex from 'vuex'
import firebase from 'firebase';
import db from '@/firebase/init'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
items: null
},
getters: {
getItems: state => {
return state.items
}
},
mutations: {
setAllUser: (state, items) => {
state.items = items
}
},
actions: {
setAllUser: async context => {
let snapshot = await db.collection('users').get();
const items =[]
snapshot.forEach(doc => {
let userData = doc.data()
userData.id = doc.id
items.push(userData)
})
context.commit('setAllUser', items)
}
}
})
【问题讨论】:
标签: javascript firebase vue.js google-cloud-firestore vuex