写一个轮询请求接口, (1)使用condition函数判断请求响应结果,为true执行回调cb, (2)否则在delay时间后重新开始轮询, (3)同时设置重新请求次数限制,超过则报错, (4)同时设置整个轮询请求时间限制,超时报错,用JS实现
时间: 2023-06-05 22:04:31 浏览: 46
我可以帮您解答这个问题,请注意以下代码:
```
function pollApi(url, interval, retryLimit, timeLimit, callback) {
let retryCount = 0;
let timeStart = Date.now();
let stopPolling = false;
const poll = function() {
if (stopPolling) {
return;
}
fetch(url)
.then(response => response.json())
.then(data => {
if (data.result === true) {
stopPolling = true;
callback(data);
} else {
if (retryCount >= retryLimit) {
stopPolling = true;
console.error('Request failed after', retryLimit, 'retries.');
return;
}
const timeElapsed = Date.now() - timeStart;
if (timeElapsed >= timeLimit) {
stopPolling = true;
console.error('Request timed out after', timeLimit, 'ms.');
return;
}
setTimeout(poll, interval);
retryCount++;
}
})
.catch(error => {
if (retryCount >= retryLimit) {
stopPolling = true;
console.error('Request failed after', retryLimit, 'retries.');
return;
}
console.error(error);
setTimeout(poll, interval);
retryCount++;
});
}
poll();
}
```
这个功能会调用一个API,每隔一定时间轮询(或者“poll”)API,直到返回一个正确的结果或者达到指定的最大轮询次数或者达到指定的时间限制。如果返回正确的结果,会调用传入的回调函数。如果达到了轮询次数或者时间限制,则会提示错误并停止轮询。 这个代码中使用了fetch API来调用接口。如果您的浏览器不支持fetch,请考虑使用XMLHttpRequest。