Cuando el usuario presiona el botón de búsqueda por primera vez, funciona como debería y toma aproximadamente 30 segundos obtener todos los datos, por lo que si el usuario decide hacer clic en el botón de búsqueda nuevamente con un nuevo término de búsqueda, todo se estropea porque el bucle asíncrono anterior no es ya hecho. Ayude a encontrar una solución para eliminar la pila de llamadas anterior y reiniciar el proceso sin continuar con el ciclo anterior.
searchButton.addEventListener("click", (e) => { e.preventDefault(); getPrice(data); } async function getPrice(data) { for (singleResult of data) { await fetchWeb(Title) } }
Utilice un contador de clics global:
let calls = 0; searchButton.addEventListener("click", (e) => { e.preventDefault(); getPrice(data, ++calls); } async function getPrice(data, id) { for (singleResult of data) { if (id !== calls) break; // ^^^^^^^^^^^^^^^^^^^^^^^^ await fetchWeb(Title) } }
Tan pronto como cambien las calls
, el bucle actualmente activo se detendrá.