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

How can I get the error message out of Http.Error?

我正在尝试完成 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 转换成字符串吗?

您可以使用 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)