Digamos que estoy llamando a una API que me da información sobre una película en particular según su id
.
Tengo una función para hacer una llamada a la API:
async function main() { const movieDetails = await getMovieInfo(movieID) } setInterval(main,1000*2)
La llamada API tarda algún tiempo en devolver los datos de la película, digamos 10 segundos (este tiempo, por supuesto, puede ser variable). Ahora, ¿cómo espero a que se llame a la API antes de la siguiente llamada a la función main
?
En lugar de setInterval, use una función recursiva con setTimeout
const getMovieInfo = (movieID) => fetch(`https://jsonplaceholder.typicode.com/posts/${movieID}`) .then(res => res.json()) .catch(err => { console.log(err) }); const loopGetMovie = async () => { const movieDetails = await getMovieInfo(34); // Await for response... console.log(movieDetails); setTimeout(loopGetMovie, 2000); // then timeout a next recursion }; const main = () => { loopGetMovie(); // Other "main" function calls here... }; // Init: main();
Si realmente desea setInterval()
, puede agregar otra condición para verificar si es hora de getMoveInfo:
let running = false; async function main() { if (running) return; running = true; const movieDetails = await getMovieInfo(movieID) running = false; } setInterval(main, 1000*2)
Aunque estoy de acuerdo en que el setTimeout
propuesto es una solución mucho mejor.