2016-07-04 3 views
2

У меня проблема. У меня есть клиент, который создает экземпляр, у которого есть готовое логическое свойство. Я хочу подождать, пока он переключится на истину, а затем решит обещание. Я пробовал много разных способов, включая цикл, который полностью блокирует поток, не проверяя наличие обновлений.RxJs Как наблюдать изменение свойств объекта

Вот что попытка

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

Мой вопрос: Есть ли способ использовать RxJs, чтобы помочь .. Может испускать и событие, если готовое свойство изменяется? Ниже приведен более псевдокод для того, что я пытаюсь сделать.

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); 
      }); 
}; 

Любые предложения? Благодаря!

ответ

2

Если вы можете, вы можете перезаписать 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; } 

}); 

Это не будет работать, если свойство не настраивается, или объект заморожен и т. д.

+0

Спасибо, это получилось великолепно и позволило мне избавиться от зависимости модуля. – Proximo

Смежные вопросы