Closed JSteunou closed 8 months ago
Hello, je ne sais pas si il y a un rapport mais depuis la 1.4.1 j'ai des mises à jour bizarres. Le temps entre 2 mise à jour est devenu très long. Ci-joint la courbe d'un de mes thermomètres Tiko (Je suis passé sur la 1.4.1 à 16h le 2/3 au milieu de la courbe). Toutes mes courbes sont sur le même modèle.
@JSteunou en effet, j'ai publié la 1.4.2 qui restaure le setInterval
comme à l'origine.
En fait, le setInterval
avait toute sa place : si update
se rappelle tout seul à la fin, c'est en fait voulu.
Imagine que pendant l'appel d'API dans update
, on change la température de consigne. La température n'aurait été mise à jour qu'au prochain appel de update
, soit au plus tard dans updateIntervalMinutes
(donc potentiellement dans longtemps). En s'appelant à la fin de la fonction, on s'assure que le changement d'état sera bien quasi instantané.
Ce n'est pas non plus redondant : si updateRequested
vaut false
parce qu'il n'y a pas eu de mouvement, on sort tout de suite de la fonction. 😉
Le updateIntervalMinutes
ne veut pas dire "il y'aura au plus un appel tous les updateIntervalMinutes
", c'est l'intervalle maximum entre deux appels.
Scénario :
setInterval
appelle update
updateRequested
est donc défini à true
update
se rappelle lui-mêmeupdateRequested
valant true
, on rafraîchit l'état avec la nouvelle température de consigne. Sans ça, le rafraîchissement n'aurait eu lieu qu'à la prochaine itération de setInterval
update
se rappelle lui-mêmeupdateRequested
valant false
, on sort de la fonctionsetInterval
appelle update
setInterval
appelle update
Dans le cas nominal, on a donc l'état qui est mis à jour tous les updateIntervalMinutes
. En revanche, quand un ordre est donné, ce n'est pas tout à fait le cas pour des raisons de réactivité.
Donc si, c'était bien le cas avant la 1.4.1. 😉
Merci pour le scénario déroulé c'est plus clair, effectivement j'étais passé à côté de updateRequested
Dans les options on peut mettre un update interval sauf qu'il n'est pas respecté (ce n'était pas le cas non plus avant la 1.4.1 avec le setInterval)
Le problème se situe ici
update
se rappelle lui même. Il y a bien une tempo pour respecter à minima 1 min mais c'est une constante.L'option est respectée seulement la 1e fois dans le constructeur ici
Il faudrait soit :
setInterval
qui appelupdate
tous les X temps et enlever l'auto-appel à la fin deupdate
update
depuis le constructeur sanssetTimeout
et laisser l'appel récursif mais avec unsetTimeout
de l'interval des optionsupdate
depuis le constructeur sanssetTimeout
, laisser l'appel récursif et profiter de la tempo au début de lupdate
pour dire on attendMath.max(1, updateIntervalMinutes)