Quiero llamar a un método 5 veces en cada segundo. por ejemplo, tengo un método A que quiero ejecutar este método 5 veces cada 1 segundo. Entonces, ¿cómo puedo hacerlo?
methodA(){ console.log("called") } timePeriod(){ setimeout.... } let timePeriod = 1000 // 1000 ms function methodA(){ console.log("called") } setInterval(methodA, timePeriod) Observe aquí que pasamos la función como un argumento sin () que, en otras palabras, estamos haciendo referencia a la función. Tenga en cuenta que si pasa el nombre de la función junto con () significa que la está llamando de forma independiente
Además, tenga en cuenta que setInterval funciona un poco diferente de lo que podría pensar, ya que es una función asincrónica de tarea de macro en el bucle de eventos . si no sabe sobre el ciclo de eventos, simplemente todo lo que necesita saber es que setInterval en realidad no llama a la función a menos que el resto de su secuencia de comandos se despida + el período de tiempo que especifique
setInterval = el tiempo necesario para activar el resto del script + el período de tiempo que especifique
y lo que puedes hacer para probar esto es:
const tick = Date.now(), timeLog = (val='---') => console.log(`${val} \n Elapsed: ${Date.now() - tick} ms`) setInterval(_ => timeLog('smth from setInterval'), 1000) for(let i=1;i<1000000000;i++){ // this loop will run for 1B times so that we get a clear time delay } timeLog('smth from normal console.log')Uno podría controlar tanto el intervalo en sí mismo como la condición para terminar el intervalo en ejecución, escribiendo una función de utilidad/ayuda que habilita no solo las funciones sincronizadas sino también los métodos sincronizados .
function clocked(interval, isTerminate, proceed, target) { let count = 0; let intervalId = setInterval(() => { proceed.call(target ?? null); if (isTerminate(++count)) { clearInterval(intervalId); } }, interval); } const obj = { text: "The quick brown fox jumps over the lazy dog.", log() { console.log(this.text); }, }; function doTerminateWhen(counter) { return counter >= 5; } setTimeout(() => { console.log('1.001 seconds passed'); }, 1001); clocked(200, doTerminateWhen, obj.log, obj); setTimeout(() => { console.log('1 second passed'); }, 1000); .as-console-wrapper { min-height: 100%!important; top: 0; }Puedes hacerlo con setInterval()
const test = setInterval(() => console.log("Hello method"),1000); setTimeout( () => clearInterval(test), 5000);¡Espero que sea lo que necesitas!