我正在尝试将其保存到某个位置,如果有人单击该按钮将更新数据库,但是如果我输入50会发生什么情况,它将继续运行它,并且我有一个跟踪板来汇总所有内容,从而使服务器和服务器过载。通常在刚好超过100时使总数达到1000。
我尝试了一个文档准备功能,我已经打开了一个功能。 (“点击”),并且可以多次运行
$('#update_new_used-counter').one('click', function (event) {
event.preventDefault();
let updated_new_counter = $('#new_sold-update').val().trim();
let updated_used_counter = $('#used_sold-update').val().trim();
trackingBoardRef.on("value", function(snapshot) {
let current_new_counter = snapshot.val().new;
let current_used_counter = snapshot.val().used;
if (updated_new_counter == '') {
trackingBoardRef.update({
new: current_new_counter,
});
} else {
trackingBoardRef.update({
new: updated_new_counter,
})
};
if (updated_used_counter == '') {
trackingBoardRef.update({
used: current_used_counter,
});
} else {
trackingBoardRef.update({
used: updated_used_counter,
})
};
console.log(snapshot.val().new);
console.log(snapshot.val().used);
});
});
这就是我现在所拥有的,并且一直保持运行多次,直到firebase说我不得不处理许多请求并停止它。我只想更新一次
答案 0 :(得分:0)
致电时:
trackingBoardRef.on("value", function(snapshot) {
您在trackingBoardRef
中的数据上附加了一个侦听器,该侦听器将立即以当前值触发,然后在trackingBoardRef
下的数据发生更改时立即触发。而且,由于您要在代码中的trackingBoardRef
下更改数据,因此要创建一个无限循环。
如果只想读取一次数据,则可以使用恰当命名的once
方法:
trackingBoardRef.once("value", function(snapshot) {
...
请注意,如果您要根据其当前值更新trackingBoardRef
下的值,那么您实际上应该use a transaction,以防止用户覆盖彼此的更改。