Si quiero realizar una tarea al menos después de 5 segundos, ¿es una buena idea usar recursión y setTimeOut() en lugar de setInterval()? Escribí a continuación para lograr esto:
let interval=5000; function job(){ let startTime = new Date(); fetchData();//actual task to perform at least after 5 seconds, can take more less or more than 5 seconds let elaspedTime = (new Date().getTime()) - startTime.getTime(); let waitTime = (interval * 1000) - elaspedTime; if (waitTime > 0) { setTimeout(() => { job(); }, waitTime); } else { job(); } }Puede utilizar un intervalo establecido cada 5 segundos. Recuerde que setInterval devuelve un Id que puede usar para detener el intervalo una vez que obtenga los datos.
function getData(host) { // your code clearInterval(host.id); } var host = {}; host.id = setInterval(getData.bind(null,host),5000);Usé este patrón para tener acceso en la función al ID de intervalo. Puede leer más sobre esto en: Enviar id de intervalo como argumento para ejecutar la función
Puede crear una función de espera de promesa y resolver la promesa después de 5 segundos.
const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); const fetchData = () => console.log("===> fetching data"); const job = async () => { console.log("===> Job Started"); await wait(5000); console.log("===> Time to Fetch the data"); fetchData(); }; job();