Elm:解码Http。错误

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 =

我想知道如何解码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)

感谢您的帮助。

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是默认值。新模块有不同的类型。谢谢,我已经更新了你的答案,因为这是我搜索此错误时得到的第一个结果:-)