【发布时间】:2017-11-28 10:37:15
【问题描述】:
我有一个 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'});
})
});
【问题讨论】:
-
您应该使用
break;而不是return;。更多信息w3schools.com/js/js_break.asp -
它不适用于break;它立即退出循环
-
在您的原始问题中,您的第一个 IF 中有一个
return。因此,如前所述:将break;语句放在您希望函数退出的位置。 -
它的方法不是循环问题。我正在监听写入,当第一次接收和更新数据时,该函数执行 2 次。我将其更改为 onCreate,它工作正常
标签: javascript firebase firebase-realtime-database