我正在尝试在HTTP的Elm 0.17教程中完成练习.如果获取gif失败,我想让用户知道失败的原因并显示错误消息.
我修改了我的模型:
type alias Model =
{ topic : String
, gifUrl : String
, errorMessage : String
}
Run Code Online (Sandbox Code Playgroud)
并且更新中的提取失败为:
FetchFail error ->
(Model model.topic model.gifUrl (errorMessage error), Cmd.none)
Run Code Online (Sandbox Code Playgroud)
功能errorMessage如下:
errorMessage : Http.Error -> String
errorMessage error =
case error of
Http.Timeout ->
"Timeout"
Http.NetworkError ->
"Network Error"
Http.UnexpectedPayload _ ->
"UnexpectedPayload"
Http.BadResponse _ _ ->
"BadResponse"
Run Code Online (Sandbox Code Playgroud)
以上功能对我来说似乎是不必要的锅炉.有没有办法可以直接转换Http.Error成字符串?
Cha*_*ert 16
您可以使用将任何内容转换为字符串toString.这将为您提供与案例陈述几乎相同的输出:
toString Timeout == "Timeout"
toString NetworkError == "NetworkError"
toString (UnexpectedPayload "Error") == "UnexpectedPayload \"Error\""
toString (BadResponse 500 "Error") == "BadResponse 500 \"Error\""
Run Code Online (Sandbox Code Playgroud)
只需将呼叫替换为errorMessagewith toString即可errorMessage完全摆脱:
FetchFail error ->
(Model model.topic model.gifUrl (toString error), Cmd.none)
Run Code Online (Sandbox Code Playgroud)