Dans Elm
, et en particulier avec Elm Architecture lorsque l'application démarre pour la première fois, la fonction init
peut renvoyer un Cmd Msg
qui est exécuté. Nous pouvons l'utiliser pour envoyer des requêtes http ou envoyer un message au Javascript natif via ports Elm .
Ma question est, comment puis-je envoyer plusieurs commandes qui doivent être exécutées dans init
?
Par exemple, je peux faire quelque chose comme:
init : (Model, Cmd Msg)
init =
(Model "" [], (Ports.messageToJs "Hello JS"))
Et je peux faire quelque chose comme:
url : String
url =
"http://some-api-url.com"
...
fetchCmd : Cmd Msg
fetchCmd =
Task.perform FetchError FetchSuccess fetchTask
init : (Model, Cmd Msg)
init =
(Model "" [], fetchCmd)
Comment puis-je retourner les deux commandes en même temps à partir de init
?
J'ai vu Task.sequence
et même Task.parallel
mais ils semblent être bons pour exécuter plusieurs tâches, pas spécifiquement des commandes.
Utilisation Platform.Cmd.batch
( docs ):
init : (Model, Cmd Msg)
init =
( Model "" []
, Cmd.batch [fetchCmd, Ports.messageToJs "Hello JS")]
)
Faites comme le dit Sören, ou utilisez la syntaxe "bang" équivalente la plus récente:
init : (Model, Cmd Msg)
init =
( Model "" [] )
! [fetchCmd, Ports.messageToJs "Hello JS"]