Estoy tratando de usar setInterval para llamar a una API que tiene un límite de velocidad para las solicitudes por segundo. Traté de usar setInterval como un ciclo while, pero no puedo encontrar información sobre cuándo comienza la siguiente ronda.
Entonces si hago:
setInterval(() => { CallAPI(); // Some proccessing }, 300)¿Comenzará la próxima ronda después de que termine la primera o independientemente de ella? porque el orden importa, y también el tiempo puede causar un error.
También puedo intentar hacer lo mismo con setTimeout y un ciclo while como este:
while(true) { setTimeout(() => { CallAPI(); // do some proccessing }), 300 }Pero nuevamente, no estoy seguro de cuándo comenzará la próxima ronda del bucle.
Y, por último, hago trampa a mi manera y hago
while(true) { await CallAPI(); // Do proccessing await setTimeout(() => true, 300) }Entonces, ¿cuál es el orden de setTimeout() y setInterval() en un ciclo?
Simplemente llámelo cuando termine de ejecutarse. No hay necesidad de un bucle.
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();Probablemente querrá configurar su ciclo de la siguiente manera:
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()