Javascript 如何只运行一次?

Javascript 如何只运行一次?,javascript,jquery,firebase-realtime-database,Javascript,Jquery,Firebase Realtime Database,我试图让它,如果有人点击按钮,它将更新数据库,但如果我输入50,会发生什么,然后它将继续运行,我有一个跟踪板,总结一切,使我的服务器超载,并使总数在1000的时候,它通常刚刚超过100 我已经尝试了一个文档准备功能,我有一个和一个。('click')并保持多次运行 $('#update_new_used-counter').one('click', function (event) { event.preventDefault(); let updated_new_cou

我试图让它,如果有人点击按钮,它将更新数据库,但如果我输入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说我必须处理许多请求并停止它。我只想在您呼叫时更新一次:

trackingBoardRef.on("value", function(snapshot) {
您将侦听器附加到
trackingBoardRef
中的数据,该数据将立即用当前值触发,然后在
trackingBoardRef
下的数据更改时触发。由于您在代码中的
trackingBoardRef
下更改数据,因此创建了一个无限循环

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

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

请注意,如果要根据当前值更新trackingBoardRef下的值,则确实应该防止用户覆盖彼此的更改。

调用时:

trackingBoardRef.on("value", function(snapshot) {
您将侦听器附加到
trackingBoardRef
中的数据,该数据将立即用当前值触发,然后在
trackingBoardRef
下的数据更改时触发。由于您在代码中的
trackingBoardRef
下更改数据,因此创建了一个无限循环

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

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


请注意,如果要根据当前值更新
trackingBoardRef
下的值,则确实应该防止用户覆盖彼此的更改。

什么是
trackingBoardRef
?您在上传递给
的“值”事件是什么?你把jQuery和React混在一起了吗?@jmargolisvt不,没有React。TrackingBoardRef是对Firebase
var TrackingBoardRef=database.ref(“跟踪板”)的引用什么是
trackingBoardRef
?您在
上传递给
的“值”事件是什么?你把jQuery和React混在一起了吗?@jmargolisvt不,没有React。TrackingBoardRef是对Firebase
var TrackingBoardRef=database.ref(“跟踪板”)的引用