【问题标题】:Using promises to observe a cursor and stop cursor使用 promise 观察游标和停止游标
【发布时间】:2016-01-17 23:21:12
【问题描述】:

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

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 完成后如何停止监听器或观察者?

【问题讨论】:

  • 为什么不直接从changed 函数内部阻止观察者呢?在该函数上测试消息,如果它通过就停止观察者。
  • 因为我需要它等待消息再继续下一步,否则它会尝试一次发送太多命令。

标签: javascript meteor promise ecmascript-2016


【解决方案1】:

只需移动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());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多