如何从Http.Error中获取错误消息?

时间:2016-05-23 12:25:50

标签: elm

我试图在Elm 0.17 tutorial for HTTP完成练习。如果获取gif失败,我想让用户知道失败的原因,并显示错误消息。

我已将我的模型修改为:

type alias Model =
  { topic : String
  , gifUrl : String
  , errorMessage : String
  }

并且更新中的提取失败为:

FetchFail error ->
  (Model model.topic model.gifUrl (errorMessage error), Cmd.none)

函数errorMessage如下:

errorMessage : Http.Error -> String
errorMessage error =
  case error of
    Http.Timeout ->
      "Timeout"
    Http.NetworkError  ->
      "Network Error"
    Http.UnexpectedPayload _ ->
      "UnexpectedPayload"
    Http.BadResponse _ _ ->
      "BadResponse"

以上功能对我来说似乎是不必要的锅炉。有没有办法可以直接将Http.Error转换为字符串?

1 个答案:

答案 0 :(得分:16)

您可以使用toString将任何内容转换为字符串。这将为您提供与案例陈述几乎相同的输出:

toString Timeout == "Timeout"
toString NetworkError == "NetworkError"
toString (UnexpectedPayload "Error") == "UnexpectedPayload \"Error\"" 
toString (BadResponse 500 "Error") == "BadResponse 500 \"Error\""

只需将errorMessage的来电替换为toString,您就可以完全摆脱errorMessage

FetchFail error ->
  (Model model.topic model.gifUrl (toString error), Cmd.none)