estoy ejecutando una función setinterval para verificar un pago de coinbase en mi aplicación nativa de reacción, ejecuto la función cada 10 segundos, después de que se haya realizado el pago, borro el setinterval y navego a la página de inicio, pero aún así el setinteval mantiene corriendo ¿cómo puedo detener esto?
useEffect(() => { getData(); myinterval(); }, []); const myinterval= () => setInterval(function () { checkCharge(); }, 10000); const stopCounter = () => { clearInterval(myinterval); } const checkCharge = async () => { try { ...SOME_CODE_HERE... stopCounter() navigation.navigate("HomeScreen"); } catch (e) { console.log(e); } };Creo que es porque myinterval está asignado a una función y no al valor de retorno real de la función setInterval() . Así que trata de cambiar
const myinterval = () => setInterval(function () { checkCharge(); }, 10000);a
const myinterval = setInterval(function () { checkCharge(); }, 10000); y luego cancelar la variable myinterval con clearInterval(myinterval);
me encontré con un problema similar hace algunos meses, esta solución debería funcionar perfectamente:
const myinterval = setInterval(function () { checkCharge(); }, 10000); pero en mi caso, dado que setInterval en una variable en lugar de una función, tuve algunos problemas extraños, como que setInterval podría ejecutarse tres veces o seguir ejecutándose incluso después de usar clearInterval(INTERVAL_NAME); entonces, si desea verificar si se realizó un pago, cree un botón que le diga al usuario que haga clic cuando haya realizado el pago, esto sería mucho más seguro que ejecutar la función dentro de setInterval
No está utilizando el retorno de myinterval() para borrar setInterval . setInterval() devuelve una identificación que se usa para borrar el intervalo. Cuando llama a la función myinterval , está devolviendo esa ID. Lo que debe hacer es almacenar esa ID en una variable que puede usar para borrar el intervalo.
... function createInterval(){ return setInterval(checkCharge, 10000); } function stopCounter(id){ clearInterval(id); } ... var id = createInterval(); ... function checkCharge(){ try { ... stopCounter(id); ... } catch(e){ console.error(e); } }