Hola:
Es un hilo muy viejo, y no sabía lo que eran los closures, así que probablemente podría mejorar el código ahora mismo.
Si tienes que hacer 20 segundos, después 10 y luego otros 20 lo más cómodo es llamar directamente al de 20, y programar un setTimeout para las acciones siguientes dentro de 10 y 30 segundos respectivamente. A ver si con esto lo entiendes mejor. Al inicio de la aplicación ejecutaríamos estas 3 cosas:
- Llamamos a f1() que está 20 segundos ejecutándose
- Ponemos un setTimeout para f2() para que se ejecute dentro de 20 segundos (y sabemos que durará 10).
- Ponemos otro setTimeout para f3() para que se ejecute dentro de 30 segundos (1º+2º = 20''+10'' = 30'')
Al inicio se ejecutará
f1(), que tardará 20 segundos. Al de 20 segundos del inicio se ejecutará
f2(), que a su vez tardará 10 segundos más. Después de esos 10 segundos (30 segundos desde el inicio) se ejecutará finalmente
f3().
Es cómodo si sabes cuánto van a durar las funciones. Sino es muuucho más complicado, hay que jugar con una variable que habría que comprobar si cambia de estado cada muy poco (que es básicamente lo que hacía mi
comprobarSi()).
Un saludo