【发布时间】:2021-08-13 04:35:02
【问题描述】:
我正在玩弄 Elm processes 以了解更多关于它们如何工作的信息。在其中的一部分中,我正在尝试实现一个计时器。
但是,我遇到了一个障碍:我找不到在其余代码中访问进程任务结果的方法。
有一瞬间,我希望如果我使用 Cmd 解决任务,Elm 运行时会为我执行该效果,但这是一个幼稚的想法:
type Msg
= Spawned Process.Id
| TimeIsUp
init _ =
( Nothing
, Task.perform Spawned (Process.spawn backgroundTask)
)
backgroundTask : Task.Task y (Platform.Cmd.Cmd Msg)
backgroundTask =
Process.sleep 1000
-- pathetic attempt to send a Msg starts here
|> Task.map ( always
<| Task.perform (always TimeIsUp)
<| Task.succeed ()
)
-- and ends here
|> Task.map (Debug.log "Timer finished") -- logs "Timer finished: <internals>"
update msg state =
case msg of
Spawned id ->
(Just id, Cmd.none)
TimeIsUp ->
(Nothing, Cmd.none)
view state =
case state of
Just id ->
text "Running"
Nothing ->
text "Time is up"
docs说
没有供进程相互通信的公共 API。
我不确定这是否意味着一个进程无法与应用程序的其余部分进行通信。
一旦进程退出,有什么方法可以让update 函数接收到TimeIsUp?
【问题讨论】: