1 个动作 2 个提交(突变),但我必须等待我的第一个提交完成加载
1 action 2 commits (mutations), but I have to wait for my first commit to finish loading
我的操作是这样的:
actions: {
getFireBaseOrders(state) {
db.collection(`ordersOptimized`)
.where("date", ">=", 20210107)
.onSnapshot((res) => {
const changes = res.docChanges();
changes.forEach((change) => {
let payload = change.doc.data();
state.commit("firebaseOrders", payload);
});
});
state.commit("shopPerformanceTable")
},
这家商店将我的 firebase 东西推送到我所在的州。
第一个突变是这样的:
firebaseOrders(state, payload) {
for (let i = 0; i < Object.keys(payload).length - 1; i++) {
state.firebaseOrders.unshift(payload[i]);
}
第二次突变是这样的:
shopPerformanceTable(state){
// console.log(state.firebaseOrders)
state.shopPerformanceTable = Object.values(
state.firebaseOrders.reduce((newArray, oldArray) => {
const key = oldArray.shopname;
newArray[key] = newArray[key] ?? {
shopName: oldArray.shopname,
orders: 0,
revenue: 0,
pendingOrders: 0,
};
newArray[key].orders++;
newArray[key].revenue += oldArray.subtotal;
if (oldArray.statuses == "pending") {
newArray[key].pendingOrders++;
}
return newArray;
}, {})
);
// console.log(state.shopPerformanceTable);
},
问题是,它们 运行 是同步的,这意味着在第二次突变时,state.firebaseOrders 仍然是一个空数组,并且将 return 和空数组。我如何等待我的突变 firebaseOrders 在 运行 shopPerformanceTable 突变之前先完成?
我不使用 Firebase,但看起来你的第二次提交位置错误。试试这个:
getFireBaseOrders(state) {
db.collection(`ordersOptimized`)
.where("date", ">=", 20210107)
.onSnapshot((res) => {
const changes = res.docChanges();
changes.forEach((change) => {
let payload = change.doc.data();
state.commit("firebaseOrders", payload);
});
state.commit("shopPerformanceTable");
});
},
这是在 forEach
执行后将第二个提交移动到 onSnapshot
回调中。
我的操作是这样的:
actions: {
getFireBaseOrders(state) {
db.collection(`ordersOptimized`)
.where("date", ">=", 20210107)
.onSnapshot((res) => {
const changes = res.docChanges();
changes.forEach((change) => {
let payload = change.doc.data();
state.commit("firebaseOrders", payload);
});
});
state.commit("shopPerformanceTable")
},
这家商店将我的 firebase 东西推送到我所在的州。
第一个突变是这样的:
firebaseOrders(state, payload) {
for (let i = 0; i < Object.keys(payload).length - 1; i++) {
state.firebaseOrders.unshift(payload[i]);
}
第二次突变是这样的:
shopPerformanceTable(state){
// console.log(state.firebaseOrders)
state.shopPerformanceTable = Object.values(
state.firebaseOrders.reduce((newArray, oldArray) => {
const key = oldArray.shopname;
newArray[key] = newArray[key] ?? {
shopName: oldArray.shopname,
orders: 0,
revenue: 0,
pendingOrders: 0,
};
newArray[key].orders++;
newArray[key].revenue += oldArray.subtotal;
if (oldArray.statuses == "pending") {
newArray[key].pendingOrders++;
}
return newArray;
}, {})
);
// console.log(state.shopPerformanceTable);
},
问题是,它们 运行 是同步的,这意味着在第二次突变时,state.firebaseOrders 仍然是一个空数组,并且将 return 和空数组。我如何等待我的突变 firebaseOrders 在 运行 shopPerformanceTable 突变之前先完成?
我不使用 Firebase,但看起来你的第二次提交位置错误。试试这个:
getFireBaseOrders(state) {
db.collection(`ordersOptimized`)
.where("date", ">=", 20210107)
.onSnapshot((res) => {
const changes = res.docChanges();
changes.forEach((change) => {
let payload = change.doc.data();
state.commit("firebaseOrders", payload);
});
state.commit("shopPerformanceTable");
});
},
这是在 forEach
执行后将第二个提交移动到 onSnapshot
回调中。