我对如何实现轮询某个HTTP终结点的功能有些困惑,直到获得某个结果(即终结点更新)为止,但是我希望它每隔x秒以及何时发送请求。第一个带有“正确”响应的响应又回来了,我想停止/放弃其他所有过程,并使用我得到的响应。
这意味着在任何给定时间可以有多个“运行中”请求,而且我不确定如何实现此请求,即在提出另一个请求之前不等待先前请求的响应。
我正在使用本质上已经异步的request
模块,但是我不确定如何在每x秒内“触发”请求而不等待先前的请求完成。
答案 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);