Nota:
La función real funciona con async. Durante la ejecución del código, await se usa varias veces. La ejecución de la función real tarda unos 20 segundos. La función real está aquí en GitHub .
La idea:
La función func se ejecuta tan pronto como la variable specVar es True. Si en cualquier momento durante esta ejecución, specVar se convierte en False, toda la función debe ser "abortada" o detenida.
El problema:
Ya intenté poner la función en un ciclo while ( while(specVar{} ) de la función continúa ejecutándose, incluso si el ciclo while debería detenerse ( specVar = False ).
Ahora coloco una consulta if antes de cada "punto de función" para verificar si specVar sigue siendo True. Sin embargo, cuanto más compleja se vuelve la función, más esfuerzo se necesita para incluir esta consulta.
El código actual
let specVar document.getElementById("funcStart").onclick = () => { specVar = true func() } document.getElementById("funcStop").onclick = () => { specVar = false } function func() { console.log("Function starts") // Some code... if (specVar) console.log("Function still running, 1") else return // Some code... if (specVar) console.log("Function still running, 2") else return // ... }