如何告诉javascript网络应用程序始终监视变量状态的变化?

时间:2020-04-10 17:55:20

标签: javascript reactive-programming

我正在尝试学习反应式编程。我正在模拟布尔变量随时间的变化。我的想法是,我不知道何时更改它,但是我希望应用程序执行一次console.log,该变量每次从false更改为{{1}时都为true }。我是这样做的:

true

我想不通告诉应用程序每次let x = false setInterval(function(){ x = !x; }, 3000); 都在x变量的状态和着火console.log("now it's true")的情况下观看应用程序的方法。

最简单的方法是什么?我想我可以使用可观察对象来做到这一点,但是,我有点卡住了。

谢谢您的帮助。

3 个答案:

答案 0 :(得分:2)

我也是反应式编程的新手。

我会说您正确使用了可观察值。 与其将setInterval设置为x =!x,还不如这样做

例如,我没有运行它。

private xSubject = new ReplaySubject<any> (bufferSize:1);
private xReadySubject: Observable<any> = this.xSubject.asObservable();

...
// In the setInterval 
this.xSubject.next(!x);

xReadySubject.subscribe(argX => {
 console.log("Value of x: " + argX
});

答案 1 :(得分:1)

首先,您应该了解没有人使用纯js编写“反应式编程” :)有很多实现反应性的库,例如React,Vue,Angular。

我认为,JS中的每个反应性实现都基于以下基础方法:

  • 制作一个包装,例如这样:
  const obj = {
    x: true,
    setX(value) {
      this.x = value;
      // You can track x value here
    },
  };

  obj.setX(false);

  • 使用es5规范中的getter和setters,这是一个示例:
const obj = {
  _x: 5,
  get x() {
    return this._x;
  },
  set x(value) {
    this._x = value;
    // You can track x value here
  },
};

obj.x = 6;

答案 2 :(得分:0)

我发现它正在工作

let x = false

setInterval(function(){ 
   x = !x;
console.log(x);
 }, 1000);