如何在轮询时继续解决 Q 承诺

how to keep resolving Q promises when polling

我正在尝试轮询端点并使用 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
})

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