javascript - 如何监控 JavaScript 中的变量变化
问题描述
我每 2 秒从服务器接收一次价值。我想在值发生变化时运行一些代码。解决这个问题的最佳方法是什么?来自服务器的变量可能会不断变化。谢谢。
解决方案
我假设,无论出于何种原因,当您从服务器获取值时,您都无法运行代码。如果您确实要运行代码,那么只需将您获得的内容与您拥有的内容进行比较,如果它们不同就采取行动
如果您不能直接运行代码,那么如果您可以控制服务器写入的内容,则可以间接运行代码——特别是,如果您可以将其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"
推荐阅读
- c# - Expression.Like 替代基于 c# 中的文本进行过滤
- reactjs - 我如何模拟我的日期,以便它也可以在部署服务器上工作
- django - 无法插入数据,Django 主键没有默认值
- python - 烧瓶句柄通过 csv 模块即时上传 csv
- html - 如何阻止内容离开网站?
- javascript - 在 next.js 中调试 fetch 操作
- swift - AppDelegate 跳转几个 ViewControllers
- html - 引导程序中表单元素的奇怪行为(由于某种原因从 DOM 中删除)
- python-3.x - 分布式锁定机制 AWS DynamoDB 与 Python
- php - Laravel - 检查路线是否存在如果找不到则不抛出异常