我们可以使用Promise.race等待thenable
链上第一个到达的结果。Task模块似乎还不支持它,Task.sequence仅相当于Promise.all。
Non-thenable解决方案演示:
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"