javascript - 尝试使用 setTimeout() 每 5 秒间隔一次 XMLHttpRequest() API 调用时出现问题
问题描述
我正在为一个项目进行初始数据提取。它将被缓存,进一步的请求将少得多。我试图每隔 5 秒间隔一次我的 API 请求,以避免服务器超载并按照他们的规则达到速率限制。看来我的setTimeout()
功能实际上并没有按预期工作。我记录了时间戳以查看所有迭代似乎都在完全相同的时间发生。我认为这在某种程度上是由于 javascript 的异步性质,但我不知道如何解决它。任何帮助将不胜感激。
代码摘录:
var leagues;
function getLeagues(){
var reqURL = "url";
var data = new XMLHttpRequest();
data.open("GET", reqURL);
data.responseType = "text";
data.send();
// parse data on load
data.onload = function() {
// League IDs
leagues = JSON.parse(data.response)
for (i = 0; i < 5; i++) {
delay(i); // iterate every 5 secs
}
};
}
function delay(i) {
setTimeout(() => {
var d = new Date();
console.log(d.getSeconds())
}, 5000);
}
解决方案
你打电话delay
告诉 JS 在 5 秒内做某事。
然后你马上打电话delay
告诉 JS 在 5 秒内再做点什么。
所以 5 秒后第一个delay
超时触发,然后立即触发第二个超时。
如果你想将它们分开,那么你需要:
- 在 setTimeout 调用的函数中第二次调用延迟,因此第二个计时器不会在第一个计时器下启动完成
- 乘以你的时间,所以第一个是 5 秒,第二个是 10 秒,依此类推
- 重构代码以
setInterval
改用