setInterval(() => { let type = ['works', 'testing']; let ranType = type[Math.floor(Math.random() * type.length)]; if (ranType === 'works') { setInterval(async () => { console.log(`Okay Working ${RANDOM DATA}`); }, 10000); } else { setInterval(async () => { console.log(`Testing also working ${RANDOM DATA}`); }, 10000); // But RANDOM DATA should update every 10 seconds - I have RANDON data } }, 30000); // ranType should update every 30 secondsDespués de 30 segundos
si ranType es 'funciona'
debería repetir la consola con datos aleatorios cada 10 segundos
Nuevamente, después de 30 segundos, (ranType) debería cambiar a prueba
si ranType está 'probando'
debería repetir la consola con otros datos aleatorios cada 10 segundos
const ranType_reset_period = 30000; const works_reset_period = 10000; const testing_reset_period = 10000; const random_data_reset_period = 10000; let works_interval = -1; let testing_interval = -1; let RANDOM_DATA = "RANDOM_DATA_DEFAULT"; function reset_random_data() { let sample_random_data = ['RANDOM_DATA_1', 'RANDOM_DATA_2', 'RANDOM_DATA_3', 'RANDOM_DATA_4']; RANDOM_DATA = sample_random_data[Math.floor(Math.random() * sample_random_data.length)]; console.log('RANDOM_DATA', 'RESET', RANDOM_DATA); } function get_random_ranType() { let type = ['works', 'testing']; return type[Math.floor(Math.random() * type.length)]; } function reset_works_interval() { console.log(`Okay Working ${RANDOM_DATA}`); } function reset_testing_interval() { console.log(`Testing also working ${RANDOM_DATA}`); } function reset_rantype() { clearInterval(works_interval); clearInterval(testing_interval); if (get_random_ranType() === 'works') { works_interval = setInterval(reset_works_interval, works_reset_period); } else { testing_interval = setInterval(reset_testing_interval, testing_reset_period); // But RANDOM DATA should update every 10 seconds - I have RANDON data } } setInterval(reset_random_data, random_data_reset_period); setInterval(reset_rantype, ranType_reset_period); const ranType_reset_period = 30000; const works_reset_period = 10000; const testing_reset_period = 10000; const random_data_reset_period = 10000; let works_interval = -1; let testing_interval = -1; let RANDOM_DATA = "RANDOM_DATA_DEFAULT"; function reset_random_data() { let sample_random_data = ['RANDOM_DATA_1', 'RANDOM_DATA_2', 'RANDOM_DATA_3', 'RANDOM_DATA_4']; RANDOM_DATA = sample_random_data[Math.floor(Math.random() * sample_random_data.length)]; console.log('RANDOM_DATA', 'RESET', RANDOM_DATA); } function get_random_ranType() { let type = ['works', 'testing']; return type[Math.floor(Math.random() * type.length)]; } function reset_works_interval() { console.log(`Okay Working ${RANDOM_DATA}`); } function reset_testing_interval() { console.log(`Testing also working ${RANDOM_DATA}`); } function reset_rantype() { clearInterval(works_interval); clearInterval(testing_interval); if (get_random_ranType() === 'works') { works_interval = setInterval(reset_works_interval, works_reset_period); } else { testing_interval = setInterval(reset_testing_interval, testing_reset_period); } } setInterval(reset_random_data, random_data_reset_period); // But RANDOM DATA should update every 10 seconds - I have RANDON data setInterval(reset_rantype, ranType_reset_period);Ok, creo que esto es lo que quieres, avísame si no es el resultado esperado. Cada 30 segundos, el setInterval externo borra el último ID de intervalo y crea uno nuevo.
let intervalId; setInterval(() => { let type = ["works", "testing"]; let ranType = type[Math.floor(Math.random() * type.length)]; console.log("new cycle of interval of 30 seconds"); clearInterval(intervalId); setTimeout(() => { if (ranType === "works") { intervalId = setInterval(async () => { console.log(`Okay Working`); }, 10000); } else { intervalId = setInterval(async () => { console.log(`Testing also working`); }, 10000); } }); }, 30000);EDITAR
creó una nueva versión que podría ser más clara
const setIntervalXTimes = (callback, delay, repetitions) => { let count = 0; let intervalID = setInterval(() => { if (count === repetitions) { clearInterval(intervalID); } else { callback(); } count++; }, delay); }; setInterval(() => { let type = ["works", "testing"]; let ranType = type[Math.floor(Math.random() * type.length)]; if (ranType === "works") { setIntervalXTimes(() => console.log(`Okay Working`), 1000, 3); } else { setIntervalXTimes(() => console.log(`Testing also working`), 1000, 3); } }, 3000);