鍍金池/ 問答/HTML/ 在node.js中如何通過監(jiān)控變量值的改變觸發(fā)事件?

在node.js中如何通過監(jiān)控變量值的改變觸發(fā)事件?

比如通過websocket獲取了一個var a = 123;

下一次獲得數(shù)據(jù)的時候a = 321,

如何監(jiān)聽a的變化,當(dāng)a值出現(xiàn)變化的時候觸發(fā)一個事件呢?

當(dāng)然不希望用setInterval這樣的輪詢來實(shí)現(xiàn)……

回答
編輯回答
朽鹿

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");
2018年5月14日 08:20
編輯回答
葬憶

基本數(shù)據(jù)類型的話,好像沒有類似的 api,對象類型的話,可以試試 setter/getter,你這里的需求應(yīng)該是用 setter,這個通過 Proxy 對象實(shí)現(xiàn)很方便的。比如:


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 的邏輯,它就是值發(fā)生改變時的代理方法。

2017年12月27日 23:57