如何使它只运行一次?

时间:2019-04-27 13:36:40

标签: javascript jquery firebase-realtime-database

我正在尝试将其保存到某个位置,如果有人单击该按钮将更新数据库,但是如果我输入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说我不得不处理许多请求并停止它。我只想更新一次

1 个答案:

答案 0 :(得分:0)

致电时:

trackingBoardRef.on("value", function(snapshot) {

您在trackingBoardRef中的数据上附加了一个侦听器,该侦听器将立即以当前值触发,然后在trackingBoardRef下的数据发生更改时立即触发。而且,由于您要在代码中的trackingBoardRef下更改数据,因此要创建一个无限循环。

如果只想读取一次数据,则可以使用恰当命名的once方法:

trackingBoardRef.once("value", function(snapshot) {
  ...

请注意,如果您要根据其当前值更新trackingBoardRef下的值,那么您实际上应该use a transaction,以防止用户覆盖彼此的更改。