首页 > 解决方案 > 端点的异步轮询

问题描述

我有点坚持如何实现一个函数来轮询某个 HTTP 端点,直到我得到某个结果(即端点更新),但我希望它每 x 秒发送一个请求,当第一个“正确”的响应回来了,我想停止/丢弃所有其他进程并处理我得到的响应。

这意味着在任何给定时间都可以有多个“正在运行”的请求,我不确定如何实现这一点,即在发出另一个请求之前不要等待来自先前请求的响应。

我正在使用request本质上已经是异步的模块,但我不确定如何在不等待之前的请求完成的情况下每 x 秒“触发”一次请求。

标签: javascriptnode.jsrequest

解决方案


您可以使用setInterval. 像这样的东西可以工作:

function pollIt() {
  return new Promise(resolve => {
    let done = false;
    const interval = setInterval(async () => {
      if(done) {
        return;
      }
      const req = await fetch('/test');
      if(done) {
        return;
      }
      if(req.status === 200) {// assuming HTTP 200 means "OK", could be something else
        done = true;
        clearInterval(interval);
        resolve(await req.json());
      }
    }, 1000)
  });
}

推荐阅读