【问题标题】:RxJs How to Observe object property changeRxJs 如何观察对象属性变化
【发布时间】:2016-07-04 16:34:26
【问题描述】:

我遇到了一个问题。我有一个实例化具有现成布尔属性的客户端。我想等到它切换到 true 然后解决一个承诺。我尝试了很多不同的方法,包括 while 循环,它完全阻塞线程而不检查更新。

尝试一下

var startClient = function() { return new Promise((resolve, reject)=> {
          var client = CreateClient();
          while(!client.ready) {}
          resolve(client);
     });
};

我的问题是:有没有办法使用 RxJs 来提供帮助。如果 ready 属性发生变化,可能会发出和事件?下面是我正在尝试做的更多伪代码。

var startClient = function() { return new Promise((resolve, reject)=> {
          var client = CreateClient();
          var emitter = Observable.watch(client, 'ready');
          emitter.on('ready', function(result) { 
               if(result) resolve(client);
          });
}; 

有什么建议吗?谢谢!

【问题讨论】:

    标签: node.js asynchronous promise rxjs observable


    【解决方案1】:

    如果可以,您可以覆盖客户端上的 ready 属性以捕获对其的分配,如下所示:

    // Check if the ready flag is already set.
    if (client.ready) return resolve(client);
    
    let _ready;
    Object.defineProperty(client, 'ready', {
    
      // Trap an assignment and resolve if true.
      set(b) { _ready = b; if (b) resolve(client); },
    
      // Politely provider a getter in case someone else is trying to access it.
      get()  { return _ready; }
    
    });
    

    如果属性不可配置,或者对象被冻结等,这将不起作用。

    【讨论】:

    • 谢谢,效果很好,让我摆脱了模块依赖。
    猜你喜欢
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2015-12-17
    • 2014-04-18
    • 2017-09-07
    • 1970-01-01
    • 2022-01-06
    相关资源
    最近更新 更多