当Elm Html.Program调用订阅时

时间:2017-06-17 20:40:19

标签: elm

我在a Google Group中找到了对此问题的可能答案,但我想知道它是否正确,如果正确则添加后续问题。< / p>

答案是

  

每次应用中的全局更新功能因任何原因而运行时,   全局订阅对象也被重新评估,并且效果   经理收到新的当前订阅列表

如果模型被更改subscriptions,则会调用Time.every secondTime.every minute等订阅的影响 - 这是否意味着模型更改时计时器会重置?该怎么办60 - 20 = 40 seconds - 如果模型在启动后20秒更改,它会在1 minute中触发,还是会在(a & 0x0000F000) == 0x00003000 中触发?

2 个答案:

答案 0 :(得分:2)

您可以通过向每个人添加update语句来检查何时调用subscriptionsDebug.logsubscriptions函数在开始时首先被调用(因为将发送到update的消息可能取决于它)以及每次调用update之后。

计时器间隔似乎不受后续subscriptions调用的影响。例如,如果您使用elm clock example,请将订阅更改为

Time.every (10*Time.second) Tick

并在视图中添加一个按钮,将模型值重置为0,无论您何时单击按钮,都会看到勾号仍然以10s的间隔进行。

答案 1 :(得分:0)

  

TLDR;它将在1 minute中触发,除非您转到订阅   在第一分钟内关闭和开启

每次update运行时,subscriptions功能也会运行。 订阅功能本质上是您希望应用订阅的内容列表。

在示例中,您的订阅每60秒生成一次Tick消息。

您可能期望的行为是:

  • T = 0s:第一次subscriptions运行时,您开始订阅“每60秒收到Tick条消息”。
  • T =介于0到60之间:只要该特定订阅保持为ON,则update函数运行的频率无关紧要。 subscriptions将会运行,但只要您对Tick的特定订阅仍然为ON,就可以了。但/ />
  • T = 60s:您收到了订阅的Tick条消息,而这条消息将会触发update
  • T = 60s:subscriptions将再次投放(因为之前调用了update

有趣的是,如果Tick的订阅在此过程中被取消然后恢复,会发生什么:

  • T = 0:订阅Tick
  • T = 20s:假设模型中发生了某些变化,导致订阅Tick被取消
  • T = 40s:模型中的其他一些更改,导致订阅Tick再次启用
  • T = 100s:Tick消息被触发,并传递给update函数
  • T = 100s:subscriptions将再次运行