【问题标题】:Elm : Decode Http.Error榆树:解码 Http.Error
【发布时间】:2016-06-10 04:13:53
【问题描述】:

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

感谢任何帮助。

【问题讨论】:

  • 您的 Error 类型别名似乎未使用。最好将其删除(如果它在其他地方使用,则从问题中删除)。

标签: elm


【解决方案1】:

榆树 0.17:

Http.Error 类型是一个联合类型,如果有响应代码,它可以保存响应代码。

类型错误 = 超时 |网络错误 |意外有效负载字符串 | BadResponse 整数字符串

您可以通过 err 变量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/httpError 类型已被修改:

type Error
    = BadUrl String
    | Timeout
    | NetworkError
    | BadStatus (Response String)
    | BadPayload String (Response String)

【讨论】:

  • 我收到Cannot find pattern `BadResponse` 20| BadResponse code error -> error ^^^^^^^^^^^^^^^^^^^^^^
  • 在 Elm 中使用了 0.17 evancz/elm-http。因为 Elm 0.18 elm-lang/http 是默认值。新模块有不同的类型。见Http.Error
  • 谢谢,我已更新您的答案,因为这是我搜索此错误时得到的第一个结果 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-09
相关资源
最近更新 更多