如何实现并返回Cmd Msg?
例如,以下行生成 Cmd Msg :
Http.send msg request
它用于以下功能:
tryRegister : Form -> (Result Http.Error JsonProfile -> msg) -> Cmd msg
tryRegister form msg =
let
registerUrl =
"http://localhost:5000/register"
body =
encode form |> Http.jsonBody
request =
Http.post registerUrl body decoder
in
Http.send msg request
我正在尝试在TestAPI中手动编写类似的函数:
tryRegister : Form -> (Result Http.Error JsonProfile -> msg) -> Cmd msg
tryRegister form msg =
Cmd.none
以上代码编译。但是,我不清楚如何实现一个返回除Cmd.none之外的Cmd Msg的函数。
附录
type Msg
=
...
| Submit
| Response (Result Http.Error JsonProfile)
update : Msg -> Form -> ( Form, Cmd Msg )
update msg model =
case msg of
...
Submit ->
( model, runtime.tryRegister model Response )
答案 0 :(得分:3)
修改强>
最初的答案建议映射Cmd.none
,它在编译测试函数时编译并可能有用,但是如果你实际上试图在The Elm Architecture中强制另一个update
周期,那么你需要转换为Task
,如send
函数described here中所述。
send : msg -> Cmd msg
send msg =
Task.succeed msg
|> Task.perform identity
正如上面提到的@SwiftsNamesake,在大多数情况下,这不是必需的,关于该主题的整篇博文都是worth a read。
原始答案
您可以使用Cmd.map
而不是Cmd.none
将其更改为任何Cmd
:
Cmd.map (always Submit) Cmd.none