Javascript 如何在轮询时保持解析Q承诺

Javascript 如何在轮询时保持解析Q承诺,javascript,q,polling,Javascript,Q,Polling,我正在尝试轮询端点,并使用Q来解析请求。但是我明白你不能用Q来做这件事,因为一旦承诺解决了,它就完成了 有没有一种方法可以在投票时使用Q 我的设置类似于: class Poller { poll() { const deferred = Q.defer(); const promise = $.ajax({ //stuff }); promise.done((resp) => { // this resolves just

我正在尝试轮询端点,并使用Q来解析请求。但是我明白你不能用Q来做这件事,因为一旦承诺解决了,它就完成了

有没有一种方法可以在投票时使用Q

我的设置类似于:

class Poller {
  poll() {
    const deferred = Q.defer();

    const promise = $.ajax({ 
      //stuff 
    });

    promise.done((resp) => {
      // this resolves just once, how can I keep resolving
      // on future xhr calls?
      deferred.resolve(resp);
    });

    promise.always(() => {
      setTimeout(() => {
        this.poll.call(this);
      }, 5000)
    })

    return deferred.promise;
  }

}

const poller = new Poller();

poller.poll().then((resp) => {
  // keep trigging updates from polling
})

承诺的全部意义在于它只能解决一次。您正在寻找的结构是一个事件。

承诺的关键在于它只能解决一次。您正在查找的结构是一个事件。

使用进度回调,这将一次又一次地发生。解决、拒绝将终止承诺。使用进度回调,这将一次又一次发生。resolve,reject将终止承诺。所以在这个示例中,轮询,使用Q有什么真正的好处吗?我基本上需要根据获取的新数据调用一个函数,所以我应该只传递一个回调吗?在我看来,Q并不打算这样做。通过回调或使用事件库在这个例子中,轮询,使用Q有什么真正的好处吗?我基本上需要根据获取的新数据调用一个函数,所以我应该只传递一个回调吗?在我看来,Q并不打算这样做。回拨电话或使用事件库