Programa una llamada a una función luego de que cierto intervalo de tiempo haya transcurrido.
Timer(delay: double, function: FunctionReference, repeat: Bool)
Crea una instancia de timer
que programa la ejecución de la función argumento, luego de una cantidad de segundos igual al argumento delay
. El argumento repeat
indica si el timer es repetitivo, es decir, si debe repetirse o no la invocación de la función argumento luego de la primer llamada. Para referenciar la función debe utilizarse la sintaxis: @function(nombreModulo.nombreFuncion)
y la misma debe contar con una firma que cumpla 2 condiciones: retornar void
, y recibir un solo argumento de tipo Timer.
Argumentos | |
---|---|
delay | Double: segundos de delay (debe ser un valor positivo). |
function | FunctionReference: referencia a una función dentro de un módulo. |
repeat | Bool: indica si el timer es repetitivo. |
Timer(delay: double, function: FunctionReference)
Crea una instancia de timer
que programa la ejecución de la función argumento, luego de una cantidad de segundos igual al argumento delay
. Este constructor crea una instancia de timer no repetitivo, es decir, la invocación a la función argumento se produce una sola vez. Para referenciar la función debe utilizarse la sintaxis: @function(nombreModulo.nombreFuncion)
y la misma debe contar con una firma que cumpla 2 condiciones: retornar void
, y recibir un solo argumento de tipo Timer.
Argumentos | |
---|---|
delay | Double: segundos de delay (debe ser un valor positivo). |
function | FunctionReference: referencia a una función dentro de un módulo. |
Excepciones de los constructores | |
---|---|
ModuleNotFound – Module ‘moduleName’ not found in function argument of ‘Timer()’ call. | No se encuentra el módulo referenciado en el argumento ‘function’ del constructor. |
FunctionNotFound – Function ‘functionName’ not found in module ‘moduleName’ in function argument of ‘Timer()’ call. | No se encuentra la función dentro del módulo ‘moduleName’ referenciado en el argumento ‘function’ del constructor. |
WrongFunctionSignature – Wrong signature in function argument ‘module.functionName()’ of ‘Timer()’ call. Expected signature: ‘void function(Timer aTimer)’. | La firma de la función del argumento ‘function’ no coincide con una firma esperada del tipo ‘void function(Timer aTimer)’. |
WrongDelayInTimer – Delay argument cannot be negative or zero value. | El argumento ‘delay’ no puede ser negativo o cero. |
MÉTODOS PÚBLICOS
void fire()
Desencadena la invocación del argumento function
con el que fue construida la instancia del timer. En caso de timers repetitivos, los mismos no serán desprogramados. Por el contrario los timers no-repetitivos son desprogramados por más que el tiempo especificado en el argumento delay
no haya sido cumplido.
void start()
Programa la ejecución de la función argumento con el que fue construida la instancia, que será invocada cuando se complete el tiempo establecido por el argumento de construcción delay
.
En caso de que el argumento repeat
sea false, la programación del timer es cancelada luego de la invocación a la función. La segunda llamada al método start puede reiniciar el timer nuevamente.
Cabe destacar que el tiempo delay
puede verse interrumpido en caso de que la aplicación pase a segundo plano en respuesta a un [evento del ciclo de vida de la aplicación] (/matr-doc/es/language/basic#clausulas).
void stop()
Detiene el timer en caso de que ya haya sido iniciado (i.e. programado), o no produce ningún efecto en caso contrario.
Ejemplo:
Application {
DataListExperience mainExp
Timer aTimer
OnInit {
mainExp = DataListExperience()
broker.ui.push("DataListExperience", mainExp)
}
}
Experience DataListExperience {
Array<Data> data as List
OnCreate {
//Programa un timer que cada 60 segundos actualiza la lista de datos visualizados en la experiencia
aTimer = Timer(delay:60, function: @function(DataRepository.fetchDataJob), repeat: true)
aTimer.start()
}
OnDestroy {
aTimer.stop()
}
}
Module DataRepository {
void fetchDataJob(Timer timer) {
mainExp.data = service.loadData.call()
}
}