Javascript 检查firebase中的活动订单数
我试图从我的firebase DB检索全部活动订单。但每次它都返回不正确的输出。我使用onClick函数来获取totalActiveOrder。totalActiveOrder是在放置或接受MEALID状态时添加的 如果我部署一个云函数并在后端监控totalActiveOrder,是否可能?我在网上搜索,但找不到任何解决方案。 我已经附上了我的DB的截图,下面是我的方法 我正在做的是。从应用程序下订单时。此时状态为“放置”。 当餐厅接受订单时,状态变为“已接受” 订单准备就绪后,状态变为“就绪” 当客户选择订单时,订单将变为“已选择”Javascript 检查firebase中的活动订单数,javascript,reactjs,firebase,Javascript,Reactjs,Firebase,我试图从我的firebase DB检索全部活动订单。但每次它都返回不正确的输出。我使用onClick函数来获取totalActiveOrder。totalActiveOrder是在放置或接受MEALID状态时添加的 如果我部署一个云函数并在后端监控totalActiveOrder,是否可能?我在网上搜索,但找不到任何解决方案。 我已经附上了我的DB的截图,下面是我的方法 我正在做的是。从应用程序下订单时。此时状态为“放置”。 当餐厅接受订单时,状态变为“已接受” 订单准备就绪后,状态变为“就绪”
您可以使用云函数计算
totalActiveOrder
。它看起来是这样的:
const functions=require(“firebase函数”);
const admin=require(“firebase管理员”);
admin.initializeApp();
exports.countlikechange=functions.database
.ref(“/orders/{orderUid}/{meailID}”)
.onWrite(异步(更改)=>{
const countRef=collectionRef.parent.child(“totalActiveOrder”);
让我们增加;
if(change.after.exists()){
const{status=“not_set”}=change.after.val();
如果(状态==“已放置”| |状态==“已接受”){
增量=1;
}否则{
//未放置或接受状态
增量=-1;
}
}否则{
//删除订单
增量=-1;
}
等待计数参考事务((当前)=>{
返回(当前| | 0)+增量;
});
functions.logger.log(“计数器更新”);
返回null;
});
我不确定您是否需要每个
orderUid
的totalActiveOrder。如果是这样,请告诉我,我会更新代码。您能再解释一下您的用例吗。我仍然没有得到一切。您尝试获取总的活动订单,但在代码中尝试获取下一个状态
。你也可以分享你用来增加总数的云函数。@TarikHuber检查我的新编辑兄弟。我没有云功能。我只是想知道我是否能解决这个问题,你能准确地说出你所说的错误计数是什么意思吗?
checkActiveOrder = (uid) => {
let activeOrder = 0
firebase.database().ref('orders/' + uid + "/").once('value').then(snapshot => {
snapshot.forEach(dataSnap => {
let status = dataSnap.val().status
console.log(status)
if (status === "placed" || status === "accepted") {
activeOrder++
}
})
console.log(activeOrder)
});
}
//trigger when button is clicked
handleClick = async (uid, mealId, type) => {
this.checkActiveOrder(uid)
let status = getNextStatus(type);
function getNextStatus(type) {
switch (type) {
case 'placed': return "accepted";
case 'accepted': return "ready";
case 'cancel': return "cancel"
case 'ready': return "picked";
case 'decline': return "decline";
default: return null
}
await firebase.database().ref('orders/' + uid + "/" + mealId + '/status').set(status);
}