Javascript 使用承诺观察光标并停止光标

Javascript 使用承诺观察光标并停止光标,javascript,meteor,promise,ecmascript-2016,Javascript,Meteor,Promise,Ecmascript 2016,我找不到一个很好的方法来做到这一点,但这里是我的基本方法。它的目标是观察对象的状态,直到找到与正则表达式匹配的消息 Cylon.waitForMessage(regex) { check(regex, RegExp); const observer = this.connections.find({ name: 'messages' }).observe({ changed: function (doc) { console.log(doc.lastMe

我找不到一个很好的方法来做到这一点,但这里是我的基本方法。它的目标是观察对象的状态,直到找到与正则表达式匹配的消息

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

只需将逻辑移到
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
函数中停止观察者?在该函数上测试消息,如果消息通过,请停止观察者。因为我需要它在继续下一步之前等待消息,否则它会尝试一次发送太多命令。为什么不从
已更改的
函数内部停止观察者?在该函数上测试消息,如果消息通过,请停止观察者。因为我需要它在继续下一步之前等待消息,否则它将尝试一次发送太多命令。