Elm:调用 Http.post 时,如何从"expect"向消息发送额外的参数?



我第一次尝试在Elm中创建一个应用程序。我需要使用Http.post.与服务器应用程序进行交互

我有这样的消息类型:

type Msg =
…
| Send (String, String)
| Recv (String, String)

更新功能如下:

update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
…
Send (name, data) ->
(newModel, Http.post
{ url = url
, body = Http.multipartBody [Http.stringPart "data" data]
, expect = Http.expectString (Recv name)
})
Recv (name, data) -> … -- process data

但是当我运行这个时,它在Http.post中产生了一个类型不匹配的错误。那么我如何将name和newData传递给Msg;Recv";同时

您的类型构造函数Recv需要一个作为字符串元组的单个参数。所以本质上是CCD_ 2。

因此,当您调用Recv name,其中name : String时,您将得到一个类型错误。

这里有两种解决方案:

  1. 您将Recv的定义更改为

    | Recv String String
    

    这意味着您现在可以部分应用Recv构造函数并返回函数String -> Msg,这正是Http.expectString想要的。

  2. 您更改期望调用以获得正确的形状:

    , expect = Http.expectString (body -> Recv ( name, body ))
    

    在这里,您明确地生成Http.expectString想要的函数。

最新更新