我第一次尝试在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
时,您将得到一个类型错误。
这里有两种解决方案:
-
您将
Recv
的定义更改为| Recv String String
这意味着您现在可以部分应用
Recv
构造函数并返回函数String -> Msg
,这正是Http.expectString
想要的。 -
您更改期望调用以获得正确的形状:
, expect = Http.expectString (body -> Recv ( name, body ))
在这里,您明确地生成
Http.expectString
想要的函数。