[英]How to make this run only once?
我试图将其保存在某个位置如果有人单击该按钮,它将更新数据库,但是如果我输入50会发生什么,它将继续运行它,并且我有一个跟踪板,对所有内容进行汇总,从而使服务器超负荷并使总数在1000的时候,通常超过100。
我已经尝试了一个文档就绪功能,并且已经启用了一个功能。 (“点击”),并且可以多次运行
$('#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说我不得不处理许多请求并停止它为止。 我只想更新一次
你打电话时:
trackingBoardRef.on("value", function(snapshot) {
您将侦听器附加到trackingBoardRef
中的数据,该数据将立即由当前值触发,然后在trackingBoardRef
下的数据发生更改时立即触发。 而且,由于您要在代码中的trackingBoardRef
下更改数据,因此要创建无限循环。
如果只想读取一次数据,则可以使用恰当地命名once
方法:
trackingBoardRef.once("value", function(snapshot) {
...
请注意,如果您要根据trackingBoardRef
的当前值更新该值,则您确实应该使用一个事务来防止用户覆盖彼此的更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.