运行 在 Elm 中同时执行两个命令
Run two commands at the same time in Elm
在 Elm
中,特别是 Elm Architecture when the app first starts the init
function can return a Cmd Msg
that is executed. We can use this for sending http requests or send a message to native Javascript via Elm ports。
我的问题是,如何发送多个应该在 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
同时 return 两个命令?
我见过 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"]
在 Elm
中,特别是 Elm Architecture when the app first starts the init
function can return a Cmd Msg
that is executed. We can use this for sending http requests or send a message to native Javascript via Elm ports。
我的问题是,如何发送多个应该在 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
同时 return 两个命令?
我见过 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"]