Асинхронный опрос конечной точки - PullRequest
0 голосов
/ 02 июня 2019

Я немного застрял в том, как реализовать функцию для опроса определенной конечной точки HTTP, пока не получу определенный результат (т.е. обновления конечной точки), но я бы хотел, чтобы он отправлял запрос каждые х секунд и когда возвращается первый с «правильным» ответом, я бы хотел остановить / выбросить все остальные процессы и работать с полученным ответом.

Это означает, что может быть несколько запросов «в полете» в любой момент времени, и я не уверен, как это реализовать, то есть не ждать ответа от предыдущего запроса, прежде чем сделать другой запрос.

Я использую модуль request, который уже является асинхронным по своей природе, но я не уверен, как я могу «запускать» запросы каждые x секунд, не дожидаясь завершения предыдущих.

Ответы [ 2 ]

1 голос
/ 02 июня 2019

Вы можете использовать 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)
  });
}
0 голосов
/ 02 июня 2019
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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...