elm/http 1.0.0 定义Http.Error为
type Error
= BadUrl String
| Timeout
| NetworkError
| BadStatus (Response String)
| BadPayload String (Response String)
Run Code Online (Sandbox Code Playgroud)
但2.0.0将其更改为
type Error
= BadUrl String
| Timeout
| NetworkError
| BadStatus Int
| BadBody String
Run Code Online (Sandbox Code Playgroud)
接收时BadStatus我无法获取请求的正文,只能获取状态代码。在文档中,埃文提出了一个解决方案,但我不明白如何使其发挥作用。
如果我们定义自己的expectJson类似
expectJson : (Result Http.Error a -> msg) -> D.Decoder a -> Expect msg
expectJson toMsg decoder =
expectStringResponse toMsg <|
\response ->
case response of
Http.BadStatus_ metadata body ->
Err (Http.BadStatus metadata.statusCode)
... …Run Code Online (Sandbox Code Playgroud) 在Elm 0.18中,如何定义执行请求的函数,当接收到响应时,该函数将更新函数的消息作为参数?
如下代码:
mypost : String -> String -> msg -> Cmd msg
mypost url csrf mymsg =
Http.request
{ method = "POST"
, headers = [ Http.header "X-CSRFToken" csrf ]
, url = url
, body = Http.emptyBody
, expect = Http.expectJson mydecoder
, timeout = Nothing
, withCredentials = False
}
|> RemoteData.sendRequest
|> Cmd.map mymsg
Run Code Online (Sandbox Code Playgroud)
无法编译:
函数的参数
map导致不匹配。124 | Cmd.map m ^函数
map期望参数为:Run Code Online (Sandbox Code Playgroud)a -> msg但它是:
Run Code Online (Sandbox Code Playgroud)msg提示:函数似乎还需要1个参数。
如果味精接受一个参数怎么办?例如:
|> Cmd.map …Run Code Online (Sandbox Code Playgroud)