我正在执行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
,却不知道如何调试。真的很难知道问题出在哪里。
答案 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
时将失败)