web-dev-qa-db-fra.com

Exécutez deux commandes en même temps dans Elm

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.

30
antfx

Utilisation Platform.Cmd.batch ( docs ):

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

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"]
5
swelet