setInterval()等待时间是在前一个被调用之后还是在它完成之后?/如何控制循环迭代之间的等待时间?



我正在尝试使用setInterval来调用具有每秒请求速率限制的API。我尝试使用setInterval作为while循环,但我找不到关于它何时开始下一轮的信息。

所以如果我这样做:

setInterval(() => {
CallAPI();
// Some proccessing
}, 300)

下一轮是在第一轮结束后开始还是不管它?因为顺序很重要,而且时间也会导致错误。

我也可以尝试用setTimeout和while循环做同样的事情,像这样:

while(true) {
setTimeout(() => {
CallAPI();
// do some proccessing
}), 300
}

但是,我不确定下一轮循环何时开始。

最后我欺骗我的方式,并做

while(true) {
await CallAPI();
// Do proccessing
await setTimeout(() => true, 300)
}

那么setTimeout()和setInterval()在循环中的顺序是什么?

在执行完成后调用它。不需要循环

function fakeCall () {
return new Promise((resolve) => {
window.setTimeout(resolve, Math.random() * 2);
});
}

function next() {
window.setTimeout( async function () {
await fakeCall();
console.log(Date.now());
next();
}, 3000);
}
next();

您可能希望按照以下方式设置循环:

var TO_asyncLoop = null;
function asyncLoop(fn, ms){
clearTimeout(TO_asyncLoop);
TO_asyncLoop = setTimeout(() => { fn() }, ms)
}
var i = 0;
function doSomething(){
// do somthing
console.log("hi", i++);
// when this "something" is finished, do it again:
asyncLoop(doSomething, 500)
}
doSomething()

相关内容

  • 没有找到相关文章

最新更新