我正在尝试使用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()