2017-04-16 14 views
-2

n00b。我遇到了這個關於排序消息的問題,how to chain Cmd Msgs和乍得吉爾伯特的答案。具有「等待」語義的序列消息/命令

Kewl。現在如果順序消息本身產生的命令需要在原始排序的消息的剩餘部分之前運行,那該怎麼辦呢?我認爲,既然上面機器的答案摺疊 - 通過它的列表,我會切換到通過命令「隊列」運行的普通ol遞歸。

這似乎工作(但請參閱下面的問題2)。現在,如果這條路徑中的某條命令在原始排序的消息的其餘部分被處理之前需要等待事件/消息呢?

在下面的艾莉,改編自乍得的回答以上:

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

- 從一開始狀態...
- 點擊 「點擊我」;此序列的信息[One, Two, Three]
- 消息生成一個臨時命令產生的消息One_A
- 其產生日誌: 「初始化,一,One_A,二,三」

下一頁:

- - 點擊重置
- 選中「使用端口」
- 點擊「點擊我」;序列消息[One, Two, Three]
- 消息1生成發送到出站端口的臨時命令,該命令通過訂閱端口發送到某個輸出端口
- 這產生日誌:「初始化,一,二,三,One_AReceived」foo 「」
- (當然,這並不令人驚訝,因爲輸出端口命令和傳入訂閱消息具有彼此沒有關係)

現在問題:

1)的出站端口命令的w/o有效載荷表示爲,例如port name :() -> Cmd msg。是否有傳入端口/訂閱的模擬,即接收無有效載荷的消息? port name :() -> Sub msg不起作用。 (是的,我可以丟棄的有效載荷,但請注意,這不是問題。)

2)̶在̶C̶h̶a̶i̶n̶M̶s̶g̶s̶,̶48行,̶我的預期配售事項臨時生成的指令在頭/左的̶̶!̶ ̶[̶.̶.̶.̶]̶ ̶命令 - 列出將有它處理其次.─原來̶t̶h̶a̶t̶'̶s̶並非如此;̶它需要出現在̶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̶)̶ ̶]̶̶̶(̶n O端口)̶̶收益 「正在初始化,̶一個,兩個̶,̶̶̶̶O̶n̶e̶_̶A̶̶̶,̶三」,爲什麼呢?̶是處理順序分批命令不固定?̶

回答2:

我從List在Platform.Cmd batch : List (Cmd msg) -> Cmd msg中假定batch可能意味着命令的排序。從其他地方繼續閱讀,顯然不是:例如請參閱「xarvh 2017年3月23日01:05」here。解釋片段的迴應:

任務是鏈接[和執行順序,編輯]。 cmd是告訴運行時「我有工作了一大塊你」

3),現在驅使這一切的問題:是否有一個榆木「模式」(點菜等待循環,延續等在其他語言中),其中一個序列/鏈消息,並在其處理等待特定事件之前繼續?

+1

沒有冒犯,但你能否更簡潔地重寫?一個stackoverflow問題應該只包含一個問題,並且要直截了當。 –

+0

埃馬紐埃爾,沒有采取,並thanx的建議。把它歸結於我的新事物,以及我的思想爲所提出的主要問題提供激勵背景 - 最後是問題3。從那以後,我遇到了在這裏適用的「港口任務」的提案/討論,但是,唉,它還不是一件「事情」。 – pakx

回答

0

這裏就是我發現自從:

1)模擬到傳出port name:() -> Cmd msg被傳入port name: (() -> msg) -> Sub msg(THX對時差通道ILIAS)

2)命令沒有暗示訂單的 - 執行

3)可用鏈接和執行順序的任務。最好的我發現,如果一個相互依賴的待處理消息序列產生更多中間消息/任務/端口通信等的任意組合,它們本身需要在繼續處理之前進行處理,即原始序列 - 消息不存在「一環來鏈接所有人」 - 重新考慮設計。