tw.timeout
Cote : Shared (client + server)
Utilitaires asynchrones : timeouts, boucles recurrentes, debounce et anti-spam.
Fonctions
tw.timeout.set(msec, cb, ...)
Execute un callback apres un delai.
| Parametre | Type | Description |
|---|---|---|
msec | integer ou function | Delai en ms, ou une fonction bloquante d'attente |
cb | function | Callback a executer apres le delai |
... | any | Arguments passes a cb |
Retour : TimeoutClass (handle annulable)
tw.timeout.loop(msec, cb, ...)
Cree une boucle recurrente qui execute le callback a intervalle fixe.
| Parametre | Type | Description |
|---|---|---|
msec | integer ou function | Intervalle en ms, ou une fonction bloquante d'attente |
cb | function | Callback a executer a chaque iteration |
... | any | Arguments passes a cb |
Retour : TimeoutClass — appelez :clear() pour arreter la boucle.
tw.timeout.delay(id, msec, cb, ...)
Debounce : annule tout timeout precedent avec le meme id et relance le timer. Seul le dernier appel dans la fenetre de delai sera execute.
| Parametre | Type | Description |
|---|---|---|
id | string | Identifiant unique du groupe de debounce |
msec | integer | Delai en ms |
cb | function | Callback a executer |
... | any | Arguments passes a cb |
tw.timeout.noSpam(id, msec, cb, ...)
Anti-spam : le premier appel s'execute immediatement, puis les appels suivants dans la fenetre de delai sont ignores.
| Parametre | Type | Description |
|---|---|---|
id | string | Identifiant unique du groupe anti-spam |
msec | integer | Duree du cooldown en ms |
cb | function | Callback a executer |
... | any | Arguments passes a cb |
Methodes TimeoutClass
L'objet retourne par tw.timeout.set et tw.timeout.loop.
| Methode | Description |
|---|---|
:clear() | Annuler le timeout ou arreter la boucle |
:start() | Demarrer manuellement (appele automatiquement a la creation) |
:execute() | Executer le callback immediatement |
:setCb(cb) | Changer la fonction callback |
:setMsec(msec) | Changer le delai/intervalle |
Exemples
Action differee simple
lua
tw.timeout.set(5000, function()
print("5 seconds passed")
end)Timeout annulable
lua
local timer = tw.timeout.set(10000, function()
print("This may never print")
end)
-- Annuler avant qu'il ne se declenche
timer:clear()Boucle recurrente
lua
local loop = tw.timeout.loop(1000, function()
print("Every second")
end)
-- Arreter la boucle plus tard
loop:clear()Debounce (seul le dernier appel s'execute)
lua
-- Si appele plusieurs fois rapidement, seul le dernier appel s'execute (2s apres le dernier declenchement)
tw.timeout.delay("save_position", 2000, function()
savePlayerPosition()
end)Anti-spam (premier appel uniquement, cooldown bloque les suivants)
lua
-- S'execute immediatement au premier appel, puis ignore les appels pendant 3 secondes
tw.timeout.noSpam("collect", 3000, function()
startCollection()
end)Passage d'arguments
lua
tw.timeout.set(2000, function(item, amount)
print("Collected " .. amount .. "x " .. item)
end, "apple", 5)Notes
tw.timeout.setettw.timeout.loopretournent un objetTimeoutClass. Gardez une reference si vous devez annuler plus tard.tw.timeout.delayest ideal pour les champs de recherche ou les patterns de sauvegarde automatique ou vous voulez attendre que l'utilisateur arrete de taper.tw.timeout.noSpamest ideal pour les boutons d'interaction ou vous voulez empecher les activations repetees rapides.- Quand
msecest une fonction au lieu d'un entier, elle agit comme une fonction d'attente bloquante personnalisee (la fonction doit yield/wait elle-meme).

