使用承诺观察光标并停止光标
问题描述:
我不能完全找到一个很好的方法来做到这一点,但这里是我的基本方法。其目标是观察对象的状态,直到找到与正则表达式匹配的消息。使用承诺观察光标并停止光标
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);
}
什么是适当的方法来做到这一点?承诺完成后,你如何阻止听众或观察者?
答
只需推动逻辑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());
为什么不直接从'changed'函数内部停止观察员?测试该函数的消息,如果通过则停止观察者。 – MinusFour
因为我需要它在继续下一步之前等待消息,否则它会尝试一次发送太多的命令。 – corvid