繁体   English   中英

在第一个条件为真之后退出for循环

[英]Exit out of for loop after first condition is true

我有一个Firebase函数,它会触发onWrite到数据库上的特定引用,而不是我拍摄另一个引用的快照,并且如果刚添加的值的大小等于快照的大小,则我将快照递减1并再次更新它。我有多个大小和数量,循环继续进行并删除所有内容。满足第一个条件后如何退出循环。这是我的代码:

exports.finalizeOrder = functions.database.ref('/orders/{pushId}')
.onWrite(event => {
    var orderData = event.data.val();
    return admin.database().ref('models/').child('females').child(orderData.id).once('value', function(data){
        var dbModel = data.val();
        for(var s = 0;s<dbModel.sizes.length;s++){
            if(Number(orderData.size) === dbModel.sizes[s].size){
                var index = dbModel.sizes.indexOf(dbModel.sizes[s])
                if(dbModel.sizes[s].amount > 0){
                    dbModel.amount = dbModel.amount - 1;
                    dbModel.sizes[s].amount = dbModel.sizes[s].amount -1;
                    if(dbModel.sizes[s].amount === 0){
                        dbModel.sizes.splice(index, 1)
                    }
                }
            }
        }
        admin.database().ref('models/').child('females').child(orderData.id).update(dbModel);
        admin.database().ref('orders').child(event.data.key).update({status: 'proccesing'});
    })
});

您可以使用布尔标志并在for循环的条件语句中检查它。 并在满足条件时将其设置为false。 在下面的示例中,我将其添加到了第一个if 您可以在满足条件时在for循环内所需的任何位置进行设置。

exports.finalizeOrder = functions.database.ref('/orders/{pushId}')
.onWrite(event => {
    var orderData = event.data.val();
    return admin.database().ref('models/').child('females').child(orderData.id).once('value', function(data){
        var dbModel = data.val();
        var conditionFlag = true; // Set condition flag to be true
        for(var s = 0;s<dbModel.sizes.length && conditionFlag ;s++){
            if(Number(orderData.size) === dbModel.sizes[s].size){
                conditionFlag = false; // Set conditionFlag to false wherever you want inside the loop so that the loop stops
                var index = dbModel.sizes.indexOf(dbModel.sizes[s])
                if(dbModel.sizes[s].amount > 0){
                    dbModel.amount = dbModel.amount - 1;
                    dbModel.sizes[s].amount = dbModel.sizes[s].amount -1;
                    if(dbModel.sizes[s].amount === 0){
                        dbModel.sizes.splice(index, 1)
                    }
                }
            }
        }
        admin.database().ref('models/').child('females').child(orderData.id).update(dbModel);
        admin.database().ref('orders').child(event.data.key).update({status: 'proccesing'});
    })
});

所以这里的问题是我正在监听onWrite到我指定的数据库引用,并且发生在我第一次推送数据和第二次更新它的时候,这就是为什么它执行了两次函数。我用onCreate和onCreate更改了onWrite它运作完美。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM