web-dev-qa-db-ja.com

Elmで2つのコマンドを同時に実行する

Elmでは、特に Elm Architecture を使用すると、アプリが最初に起動したときにinit関数がCmd Msg実行されます。これを使用して、httpリクエストを送信したり、メッセージを Elm ports を介してネイティブJavaScriptに送信したりできます。

私の質問は、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から同時に返すことができますか?

私は見た Task.sequenceおよびTask.parallelしかし、それらは特にコマンドではなく、複数のタスクを実行するのに適しているようです。

30
antfx

使用する Platform.Cmd.batchdocs ):

init : (Model, Cmd Msg)
init =
  ( Model "" []
  , Cmd.batch [fetchCmd, Ports.messageToJs "Hello JS")]
  )
49
Søren Debois

Sörenが言うようにするか、新しい同等の "bang" -syntaxを使用します。

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