在node.js中如何通过监控变量值的改变触发事件?

比如通过websocket获取了一个var a = 123;

下一次获得数据的时候a = 321,

如何监听a的变化,当a值出现变化的时候触发一个事件呢?

当然不希望用setInterval这样的轮询来实现……

阅读 5.4k
2 个回答

基本数据类型的话,好像没有类似的 api,对象类型的话,可以试试 setter/getter,你这里的需求应该是用 setter,这个通过 Proxy 对象实现很方便的。比如:


function watchChange(object, onChange) {
  const handler = {
    defineProperty(target, property, descriptor) {
      onChange()
      return Reflect.defineProperty(target, property, descriptor)
    },
    deleteProperty(target, property) {
      onChange()
      return Reflect.deleteProperty(target, property)
    },
  }

  return new Proxy(object, handler)
}

const f = watchChange({}, () => {
  console.log('changed')
})

f.a = '1'
delete f.a

我这里为了演示,没有写提供 handler.set 的逻辑,它就是值发生改变时的代理方法。

Mobx 呀~

import {observable} from "mobx";

const value = observable.box("123");

console.log(value.get());
// prints '123'

value.observe(function(change) {
    console.log(change.oldValue, "->", change.newValue);
});

value.set("456");
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题