我想知道如何解码elm中的Http.Error并将其数据存储在我的模型中。
我知道错误响应将返回此结构。
{
error: "Some error message",
ok: false
}
以下是我的模型和我的Http请求
type alias Model =
{ url = String
, result : String
, errorMessage : String
, error : Bool
}
model : Model
model =
{ url = ""
, result = ""
, errorMessage = ""
, error = False
}
-- make the request
makeRequest : String -> Cmd Msg
makeRequest url =
Task.perform FetchFail FetchSucceed (Http.get decodeTitle url)
-- decode the success response
decodeTitle : Json.Decoder String
decodeTitle =
Json.at ["title"] Json.string
-- decode the error
decodeError =
Json.object2 User
("error" := Json.string)
("ok" := Json.bool)
我希望我可以在我的更新的FetchFail
中处理这个问题。
type Msg
= FetchTitle
| FetchSucceed String
| FetchFail Http.Error
update : Msg -> Model -> (Model, Cmd Msg)
update action model =
case action of
...
FetchFail err ->
let
error =
decodeError error
in
({ model | ok = error.ok, errorMessage = error.error}, Cmd.none)
感谢任何帮助。
答案 0 :(得分:6)
榆树0.17:
Http.Error类型是一种联合类型,如果有的话,它可以保存响应代码。
输入错误 =超时 |网络错误 | UnexpectedPayload字符串 | BadResponse Int String
您可以通过错误变量case
来访问它。
FetchFail err ->
case err of
BadResponse code error ->
-- handle error message
_ ->
-- other error
http://package.elm-lang.org/packages/evancz/elm-http/3.0.1/Http#Error
使用 elm 0.18 并转换为elm-lang/http 错误类型已被修改:
type Error
= BadUrl String
| Timeout
| NetworkError
| BadStatus (Response String)
| BadPayload String (Response String)