Elm:解码Http。错误
我想知道如何解码elm中的Http.Error并将其数据存储在我的模型上 我知道错误响应将返回此结构Elm:解码Http。错误,elm,Elm,我想知道如何解码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 =
{
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)
感谢您的帮助。Elm 0.17: Error类型是一种联合类型,如果存在响应代码,它可以保存响应代码 类型错误 =超时 |网络错误 |意外有效负载字符串 |BadResponse Int字符串 您可以通过err变量
case
来访问它
FetchFail err ->
case err of
BadResponse code error ->
-- handle error message
_ ->
-- other error
使用elm 0.18,并修改了向错误类型的转换:
type Error
= BadUrl String
| Timeout
| NetworkError
| BadStatus (Response String)
| BadPayload String (Response String)
您的
错误
类型别名似乎未使用。最好将其删除(如果在其他地方使用的话)。我得到在Elm 0.17中找不到模式`BadResponse`20 | BadResponse code error->error^^^^^^^
。因为Elm 0.18是默认值。新模块有不同的类型。谢谢,我已经更新了你的答案,因为这是我搜索此错误时得到的第一个结果:-)