Ошибка при преобразовании Http.Error в String с toString в Elm 0.19 - PullRequest
3 голосов
/ 04 июня 2019

Я работаю над задачей Elm для декодирования JSON из API.Проблема, с которой я столкнулся, заключается в том, что написанный мной декодер не соответствует JSON, поэтому я хочу показать ошибку.Но я не могу преобразовать сообщение об ошибке из #Http.Error# type в #String# type в 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: И есть ли другой способ найти проблему при декодировании JSONс NoRedInk/elm-decode-pipeline пакетом?Я попытался с Debug.log, но он просто напечатал function и не знаю, как отлаживать.Трудно понять, в чем проблема.

1 Ответ

7 голосов
/ 04 июня 2019

Если вы получите 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 был удален из Вяза 0.19. Сейчас существует Debug.toString, но его нельзя использовать в производственных приложениях (т. Е. Когда --optimize передается в elm make, оно не будет выполнено при обнаружении Debug.toString)

...