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()
    }
}