在Elm 0.19中使用toString将Http.Error转换为String时出错

时间:2019-06-04 11:23:00

标签: elm

我正在执行Elm任务,以从API解码JSON。我遇到的问题是我编写的解码器与JSON不匹配,因此我想显示该错误。但是我无法使用#Http.Error#函数将错误消息从#String#类型转换为Elm中的toString类型。这是代码:

type Model =
  Loading
  | Failure String
  | Success (List WishlistItem)
  | NoData

update msg model =
  case msg of
    GotItems (Ok result) ->
      (Success result.data.wish_list_items, Cmd.none)
    GotItems (Err errorString) ->
      (Failure (toString errorString), Cmd.none)
                ▔▔▔▔▔▔▔▔

错误是:

  

命名错误-我找不到toString变量:

     

168 | (失败(toString errorString),Cmd.none)

我尝试使用Basics.toString,但不起作用。谁能帮助我指出问题所在?

P / s 1:我正在使用Elm 0.19

P / s 2:使用NoRedInk/elm-decode-pipeline包解码JSON时,还有另一种方法可以找到问题吗?我尝试使用Debug.log,但是它只打印了function,却不知道如何调试。真的很难知道问题出在哪里。

1 个答案:

答案 0 :(得分:7)

如果您返回Http.Error,它将有五个可能的值:

type Error
    = BadUrl String
    | Timeout
    | NetworkError
    | BadStatus Int
    | BadBody String

如果JSON解码存在问题,它将为BadBody,而String将是来自JSON解码器的错误消息。您可能需要这样的功能:

errorToString : Http.Error -> String
errorToString error =
    case error of
        BadUrl url ->
            "The URL " ++ url ++ " was invalid"
        Timeout ->
            "Unable to reach the server, try again"
        NetworkError ->
            "Unable to reach the server, check your network connection"
        BadStatus 500 ->
            "The server had a problem, try again later"
        BadStatus 400 ->
            "Verify your information and try again"
        BadStatus _ ->
            "Unknown error"
        BadBody errorMessage ->
            errorMessage

toString在Elm 0.19中已删除。现在有Debug.toString,但不能在生产应用程序中使用(即,当--optimize传递给elm make时,它在找到Debug.toString时将失败)