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
しかし、それらは特にコマンドではなく、複数のタスクを実行するのに適しているようです。
使用する 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"]