如何实现并返回Cmd Msg?

时间:2017-08-22 10:27:20

标签: elm

如何实现并返回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 )

Source code on GitHub

1 个答案:

答案 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