2017-06-17 2 views
2

J'ai trouvé une réponse possible à cette question dans a Google Group mais j'aimerais savoir si c'est correct et ajouter une question complémentaire si elle est correcte.Lorsque Elm Html.Program appelle les abonnements

La réponse il y a

Chaque fois que la fonction globale de mise à jour dans votre application fonctionne pour une raison quelconque, l'objet global abonnements est réévaluées aussi bien, et effet gestionnaires reçoivent la nouvelle liste des abonnements en cours

Si chaque fois que le modèle est modifié subscriptions s'appelle ce qui est l'effet sur les abonnements tels que Time.every second prises de Time Effect Elm Guide - est que cela signifie la minuterie se réinitialisée lorsque le modèle chang es? Et si c'était Time.every minute - si le modèle change 20 secondes après le début, est-ce qu'il tirera 60 - 20 = 40 seconds ou le 1 minute?

Répondre

2

Vous pouvez vérifier quand update et subscriptions sont appelés en ajoutant une instruction Debug.log à chacun. La fonction subscriptions est appelée d'abord au début (puisque les messages qui seront envoyés à update peuvent en dépendre) et aussi après chaque appel à update.

L'intervalle de temporisation ne semble pas affecté par les appels suivants à subscriptions. Par exemple, si vous utilisez le elm clock example, changer l'abonnement à

Time.every (10*Time.second) Tick 

et ajouter un bouton à la vue qui remet à zéro la valeur de modèle à 0, vous verrez que la tique a toujours lieu à intervalles réguliers 10s, pas importe quand vous cliquez sur le bouton.

0

TLDR; Il se déclenche en 1 minute, moins que vous mettiez votre abonnement sous et hors tension pendant la première minute

Chaque fois que votre update fonctionne, la fonction subscriptions fonctionnera aussi. La fonction d'abonnement est essentiellement une liste de choses auxquelles vous souhaitez que votre application s'abonne.

Dans l'exemple, vous avez un abonnement qui génère un message Tick toutes les 60 secondes.

Le comportement que vous pouvez vous attendre est:

  • T = 0s: La première fois que subscriptions fonctionne, vous commencez votre abonnement à "recevoir Tick message toutes les 60 secondes."
  • T = entre 0 et 60 s: tant que cet abonnement particulier reste activé, la fréquence d'exécution de votre fonction update n'a pas d'importance. subscriptions sera exécuté, mais tant que votre abonnement particulier au Tick reste activé, les choses vont bien.
  • T = 60s: Vous recevrez un message Tick de votre abonnement, lequel lancera update pour être appelé.
  • T = 60: subscriptions se déroulera à nouveau (en raison de l'appel précédent à update)

Ce qui pourrait être intéressant est ce qui se passe si l'abonnement à Tick est annulée le long du chemin, puis rétabli:

  • T = 0: abonnement à Tick
  • T = 20 ans: supposons que quelque chose change dans le modèle, ce qui provoque l'abonnement à Tick être annulée
  • T = 40: un autre changement de modèle, ce qui provoque l'abonnement à Tick à être rallumé
  • T = 100s: Tick message est mis le feu, et Transmis à update fonction
  • T = 100s: subscriptions se déroulera à nouveau