在Elm中同时运行两个命令

ant*_*tfx 28 javascript elm

在应用程序首次启动时Elm,特别是使用Elm Architecture,该init函数可以返回Cmd Msg执行的函数.我们可以使用它来发送http请求或通过Elm端口向本机Javascript发送消息.

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

例如,我可以做类似的事情:

init : (Model, Cmd Msg)
init =
  (Model "" [], (Ports.messageToJs "Hello JS"))
Run Code Online (Sandbox Code Playgroud)

我可以这样做:

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

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


init : (Model, Cmd Msg)
init =
  (Model "" [], fetchCmd)
Run Code Online (Sandbox Code Playgroud)

如何从同一时间返回两个命令init

我已经看过了Task.sequence,Task.parallel但是它们看起来很适合运行多个任务,而不是特别是命令.

Sør*_*ois 50

使用Platform.Cmd.batch(docs):

init : (Model, Cmd Msg)
init =
  ( Model "" []
  , Cmd.batch [fetchCmd, Ports.messageToJs "Hello JS")]
  )
Run Code Online (Sandbox Code Playgroud)


swe*_*let 5

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

init : (Model, Cmd Msg)
init =
  ( Model "" [] )
  ! [fetchCmd, Ports.messageToJs "Hello JS"]
Run Code Online (Sandbox Code Playgroud)