繁体   English   中英

如何使它只运行一次?

[英]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.

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