【问题标题】:How to make this run only once?如何使它只运行一次?
【发布时间】:2019-04-28 10:08:39
【问题描述】:

我正在尝试获取它如果有人单击按钮它将更新数据库但是如果我输入 50 会发生什么然后它将继续运行它并且我有一个跟踪板来总结所有内容因此它使我的服务器超载并且当它通常刚刚超过 100 时,总数在 1000 中。

我已经尝试了一个文档准备功能,我已经有一个。 ('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 的“价值”事件是什么?你在混合 jQuery 和 React 吗?
  • @jmargolisvt 不,没有反应。 TrackingBoardRef 是 Firebase 的参考
  • var trackingBoardRef = database.ref('tracking_board');

标签: javascript jquery firebase-realtime-database


【解决方案1】:

当你打电话时:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    相关资源
    最近更新 更多