Node.js RxJs如何观察对象属性更改

Node.js RxJs如何观察对象属性更改,node.js,asynchronous,promise,rxjs,observable,Node.js,Asynchronous,Promise,Rxjs,Observable,我遇到了一个问题。我有一个实例化具有就绪布尔属性的客户机。我想等到它变为现实,然后决定一个承诺。我尝试了很多不同的方法,包括while循环,它只是完全阻塞线程而不检查更新 这是一次尝试 var startClient = function() { return new Promise((resolve, reject)=> { var client = CreateClient(); while(!client.ready) {}

我遇到了一个问题。我有一个实例化具有就绪布尔属性的客户机。我想等到它变为现实,然后决定一个承诺。我尝试了很多不同的方法,包括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);
          });
}; 

有什么建议吗?谢谢

如果可以,您可以覆盖客户端上的
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; }

});

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

谢谢,这很好地解决了问题,使我摆脱了模块依赖关系。