端点的异步轮询

时间:2019-06-02 06:56:28

标签: javascript node.js request

我对如何实现轮询某个HTTP终结点的功能有些困惑,直到获得某个结果(即终结点更新)为止,但是我希望它每隔x秒以及何时发送请求。第一个带有“正确”响应的响应又回来了,我想停止/放弃其他所有过程,并使用我得到的响应。

这意味着在任何给定时间可以有多个“运行中”请求,而且我不确定如何实现此请求,即在提出另一个请求之前不等待先前请求的响应。

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

2 个答案:

答案 0 :(得分:1)

您可以使用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)
  });
}

答案 1 :(得分:0)

doAgain = true;

function doRequest() {
  request('YOUR END POINT ', function(error, response, body) {
      if (body == "WHAT I WANT IT TO BE") {
        doAgain = false;
        if (doAgain) {
          // DO WHAT YOU WANT TO DO
        }
        } else {
          // dont do anything
        }
      });
  }
  var interval = setInterval(function() {
    if (doAgain) {
      doRequest()
    } else {
      clearInterval(interval)
    }
  }, 100);