Подтвердить что ты не робот

Выполнять одновременно две команды в Elm

В Elm и, в частности, с Elm Architecture, когда приложение сначала запускает функцию init, можно вернуть Cmd Msg, который выполняется. Мы можем использовать это для отправки HTTP-запросов или отправки сообщения на собственный Javascript через порты в Elm.

Мой вопрос: как я могу отправить несколько команд, которые должны выполняться в 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, но они, похоже, хороши для запуска нескольких задач, а не только команд.

4b9b3361

Ответ 1

Используйте Platform.Cmd.batch (docs):

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

Ответ 2

Сделайте, как говорит Сёрен, или используйте более новый эквивалент "bang" -syntax:

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