2015-10-19 37 views
1

我不能完全找到一个很好的方法来做到这一点,但这里是我的基本方法。其目标是观察对象的状态,直到找到与正则表达式匹配的消息。使用承诺观察光标并停止光标

Cylon.waitForMessage(regex) { 
    check(regex, RegExp); 

    const observer = this.connections.find({ 
    name: 'messages' 
    }).observe({ 
    changed: function (doc) { 
     console.log(doc.lastMessage) // this is the last message to scan. 
    } 
    }); 
    let promise = new Promise((resolve, reject) => { 
    // need to find the last message here and check if it matches regex 
    }).then(() => observer.stop()); 

    return Promise.await(promise); 
} 

什么是适当的方法来做到这一点?承诺完成后,你如何阻止听众或观察者?

+0

为什么不直接从'changed'函数内部停止观察员?测试该函数的消息,如果通过则停止观察者。 – MinusFour

+0

因为我需要它在继续下一步之前等待消息,否则它会尝试一次发送太多的命令。 – corvid

回答

0

只需推动逻辑promise函数内部:

const observer = this.connections.find({ 
    name: 'messages' 
}); 

let promise = new Promise((resolve, reject) => { 
    observer.observe({ 
     changed: function(doc){ 
      if(regex.test(doc.lastMessage)){ 
       resolve(doc.lastMessage); 
       observer.stop(); 
      } 
     }); 
    }); 
    }).then((message) => doSomethingWithResolvedMessage());