Как заставить это работать только один раз? - PullRequest
1 голос
/ 27 апреля 2019

Я пытаюсь получить его там, где если кто-то нажмет кнопку, он обновит базу данных, но что произойдет, если я введу 50, то он продолжит работать, и у меня будет доска слежения, которая суммирует все, так что он перегружает мой сервер иделает общее количество в 1000, когда его обычно чуть больше 100.

Я пробовал функцию готовности к документу, у меня была и одна.('click'), и он продолжает работать несколько раз

$('#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 голосов
/ 27 апреля 2019

При вызове:

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

Вы присоединяете прослушиватель к данным в trackingBoardRef, которые будут сразу же запускаться с текущим значением, а затем впоследствии, когда изменяются данные в trackingBoardRef.И так как вы изменяете данные в коде trackingBoardRef, вы создаете бесконечный цикл.

Если вы хотите прочитать данные только один раз, вы можете использовать метко названный метод once:

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

Обратите внимание, что если вы обновляете значение в trackingBoardRef на основе его текущего значения, вам действительно следует использовать транзакцию , чтобы пользователи не перезаписывали изменения друг друга..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...