Tengo una configuración de setInterval que llama internamente a una API. Según la respuesta de la API, currentState las variables de estado previousState y estado actual.
Necesito asegurarme de que cada siguiente cosa de setInterval suceda cuando el anterior ya se haya actualizado por variables.
¿Cómo puedo hacerlo?
let previous = null; let current = null; const fakeApi = () => { return new Promise((resolve) => setTimeout(resolve(1), 3000)); }; async function fetchData() { current = await fakeApi(); callB(previous, current); previous = current; } function getStats(cb) { setInterval(fetchData, 3000); } function callB(prev, curr) { console.log(prev + " >>> " + curr); } getStats(callB);En lugar de setInterval, puede crear una función de sleep y luego llamar a fetchData después de que haya terminado
let previous = null; let current = null; const fakeApi = () => { return new Promise((resolve) => setTimeout(resolve(1), 3000)); }; const sleep = (ms) => new Promise(res => setTimeout(res, ms)); async function fetchData() { current = await fakeApi(); callB(previous, current); previous = current; await sleep(3000); return fetchData() } function callB(prev, curr) { console.log(prev + " >>> " + curr); } getStats(callB);Puede agregar un ciclo while para llamar repetidamente a la función api:
let previous = null; let current = null; const fakeApi = async () => { return new Promise(resolve => setTimeout(resolve, 3000)); }; let getStats = async ()=>{ while(true) { await fakeApi() callB(previous, current); previous = current; await new Promise(resolve => setTimeout(resolve, 3000)); //add delay between updates as required } })() function callB(prev, curr) { console.log(prev + " >>> " + curr); } getStats();