Javascript 检查firebase中的活动订单数

Javascript 检查firebase中的活动订单数,javascript,reactjs,firebase,Javascript,Reactjs,Firebase,我试图从我的firebase DB检索全部活动订单。但每次它都返回不正确的输出。我使用onClick函数来获取totalActiveOrder。totalActiveOrder是在放置或接受MEALID状态时添加的 如果我部署一个云函数并在后端监控totalActiveOrder,是否可能?我在网上搜索,但找不到任何解决方案。 我已经附上了我的DB的截图,下面是我的方法 我正在做的是。从应用程序下订单时。此时状态为“放置”。 当餐厅接受订单时,状态变为“已接受” 订单准备就绪后,状态变为“就绪”

我试图从我的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);
    }