我们可以使用Promise.race等待thenable
链上的第一个到达结果。 Task模块似乎尚不支持它,Task.sequence仅等效于Promise.all。
不可修改的解决方案演示:
import Process
import Task
init () =
( Nothing, Cmd.batch [ after 2 "2nd", after 1 "1st" ] )
after seconds name =
Process.sleep (1000 * seconds)
|> Task.map (always name)
|> Task.perform Done
type Msg
= Done String
update (Done name) model =
case model of
Nothing ->
( Debug.log name <| Just name, Cmd.none )
_ ->
( Debug.log name model, Cmd.none )
main =
Platform.worker
{ init = init
, update = update
, subscriptions = always Sub.none
}
运行它,按预期输出:
1st: Just "1st"
2nd: Just "1st"
答案 0 :(得分:4)
Stream
作为独立功能,需要维护局部状态以跟踪是否已解决该问题,您可能知道这在Elm中是不可能的。
但是通过自己跟踪模型中的状态,您可以相对轻松地完成相同的事情。这是一个使用Promise.race
来跟踪我们是否收到响应的示例:
Maybe