运行 在 Elm 中同时执行两个命令

Run two commands at the same time in Elm

Elm 中,特别是 Elm Architecture when the app first starts the init function can return a Cmd Msg that is executed. We can use this for sending http requests or send a message to native Javascript via Elm ports

我的问题是,如何发送多个应该在 init 中执行的命令?

例如我可以这样做:

init : (Model, Cmd Msg)
init =
  (Model "" [], (Ports.messageToJs "Hello JS"))

我可以做类似的事情:

url : String
url =
     "http://some-api-url.com"
...

fetchCmd : Cmd Msg
fetchCmd =
    Task.perform FetchError FetchSuccess fetchTask


init : (Model, Cmd Msg)
init =
  (Model "" [], fetchCmd)

如何从 init 同时 return 两个命令?

我见过 Task.sequence 甚至 Task.parallel,但它们似乎适合 运行 多项任务,而不是特定的命令。

使用Platform.Cmd.batch (docs):

init : (Model, Cmd Msg)
init =
  ( Model "" []
  , Cmd.batch [fetchCmd, Ports.messageToJs "Hello JS")]
  )

按照 Sören 所说的去做,或者使用更新的等效 "bang" -syntax :

init : (Model, Cmd Msg)
init =
  ( Model "" [] )
  ! [fetchCmd, Ports.messageToJs "Hello JS"]