具有“等待”语义的序列消息/命令

时间:2017-04-16 17:17:02

标签: elm

的n00b。我遇到了关于测序消息的问题,how to chain Cmd Msgs和Chad Gilbert的回答。

KEWL。现在,如果排序的消息本身产生了需要在最初排序的消息的剩余部分之前运行的命令,该怎么办?我认为,由于上面的答案中的折叠机器通过它的列表,我将切换到通过“队列”命令运行的普通ol'递归。

这似乎有效(但请参见下面的问题2)。现在,如果此路径中的一个命令需要在处理原始序列消息的其余部分之前等待事件/消息,该怎么办?

在下面的Ellie中,改编自Chad的答案:

https://ellie-app.com/WfGhcDFjxxa1/0

- 从开始状态...
- 点击“点击我”;这序列消息[One, Two, Three]
- 消息One生成临时命令,产生消息One_A
- 产生日志:“初始化,一, One_A ,二,三”

下一步:

- 点击重置
- 检查“使用端口”
- 点击“点击我”;序列消息[One, Two, Three]
- 消息One生成发送到输出端口的临时命令,500ms之后通过订阅端口发送内容 - 这会产生日志:“初始化,一,二,三,一_Aececeived”foo“” - (当然,这并不奇怪,因为传出端口命令和传入的订阅消息彼此没有关系)

现在问题:

1)带有效负载的传出端口命令表示为,例如port name : () -> Cmd msg。是否有传入端口/订阅的模拟,即接收没有有效载荷的消息? port name : () -> Sub msg不起作用。 (是的,我可以丢弃有效载荷,但请注意这不是问题。)

2)̶在̶C̶h̶a̶i̶n̶M̶s̶g̶s̶,̶线48,̶我的预期放置临时-生成的命令在磁头/ LEFT的̶̶!̶ ̶[̶.̶.̶.̶]̶̶命令 - 列出将有它处理其次.─结果是”并非如此;̶它需要出现在̶e̶n̶d̶.̶OK ...但把它在头,̶即̶̶m̶o̶d̶e̶l̶2̶ ̶!̶ ̶[̶ ̶c̶m̶d̶s̶1̶,̶ ̶c̶r̶e̶a̶t̶e̶C̶m̶d̶ ̶(̶C̶h̶a̶i̶n̶M̶s̶g̶s̶ ̶y̶s̶)̶ ̶]̶̶̶(没有端口)̶产量̶ “初始化,̶一个,两个̶,̶̶̶̶O̶n̶e̶_̶A̶̶̶,̶三”,为什么呢?̶是对PRO c̶e̶s̶s̶i̶n̶g̶̶o̶r̶d̶e̶r̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶

答案2:

我从Platform.Cmd batch : List (Cmd msg) -> Cmd msg中的List假设batch可能意味着命令命令。从其他地方继续阅读,显然不是:例如见“xarvh 2017年3月23日01:05”here。解释一下回复的摘录:

  

任务是链接[和执行顺序,Ed。]。 Cmd用于告诉运行时“我有一大堆工作”

3)现在是推动这一切的问题:是否有一个榆树“模式”(等待其他语言的等待循环,延续等),其中一个序列/链消息,并在其处理中等待特定事件在继续之前?

1 个答案:

答案 0 :(得分:1)

以下是我发现的:

1)传出port name: () -> Cmd msg的模拟传入port name: (() -> msg) -> Sub msg(Slax频道上的Thx到ilias)

2)命令没有隐含的执行顺序

3)可用的任务,可链接性和执行顺序。最好的我发现,如果要处理的相互依赖的消息序列产生更多中间消息/任务/端口通信等的任意混合,那么它们本身需要在继续w /原始序列之前进行处理。消息中没有“一个环将它们全部链接” - 重新考虑设计。