首页 > 解决方案 > 如何监控 JavaScript 中的变量变化

问题描述

我每 2 秒从服务器接收一次价值。我想在值发生变化时运行一些代码。解决这个问题的最佳方法是什么?来自服务器的变量可能会不断变化。谢谢。

标签: javascript

解决方案


我假设,无论出于何种原因,当您从服务器获取值时,您都无法运行代码。如果您确实要运行代码,那么只需将您获得的内容与您拥有的内容进行比较,如果它们不同就采取行动

如果您不能直接运行代码,那么如果您可以控制服务器写入的内容,则可以间接运行代码——特别是,如果您可以将其yourVar = ...obj.yourVar = .... 如果是这样,那么不要使用变量,而是使用带有 getter 和 setter 的对象属性。在 setter 中,将新值与您已有的值进行比较,如果不同,请采取措施:

let value = null;
const obj = {
    get yourVar() {
        return value;
    },
    set yourVar(newValue) {
        if (value !== newValue) {
            value = newValue;
            // Take action here
        }
    }
};

使用 . 从服务器接收值obj.yourVar = ...

我不推荐它,但可以使用全局变量来执行此操作,这将让代码使用yourVar = ...触发您的处理程序,方法是在全局对象上创建访问器属性(您可以通过window浏览器访问):

let value;
Object.defineProperty(window, "yourVar", {
    get() {
        return value;
    },
    set(newValue) {
        if (value !== newValue) {
            value = newValue;
            console.log("New value received: " + value);
        }
    }
});

// In the code writing to it that you don't control:
yourVar = 1; // Outputs "New value received: 1"
yourVar = 1; // No output, it's not different
yourVar = 2; // Outputs "New value received: 2"


推荐阅读