2016-06-10 59 views
3

我想知道如何解碼榆樹中的Http.Error並將其數據存儲在我的模型中。榆樹:解碼Http.Error

我知道錯誤響應將返回此結構。

{ 
    error: "Some error message", 
    ok: false 
} 

這裏是我的模型,我的Http請求

type alias Model = 
    { url = String 
    , result : String 
    , errorMessage : String 
    , error : Bool 
    } 

model : Model 
model = 
    { url = "" 
    , result = "" 
    , errorMessage = "" 
    , error = False 
    } 

-- make the request 

makeRequest : String -> Cmd Msg 
makeRequest url = 
    Task.perform FetchFail FetchSucceed (Http.get decodeTitle url) 

-- decode the success response 

decodeTitle : Json.Decoder String 
decodeTitle = 
    Json.at ["title"] Json.string 

-- decode the error 

decodeError = 
    Json.object2 User 
    ("error" := Json.string) 
    ("ok" := Json.bool) 

我希望我能在我的更新FetchFail處理這像這樣。

type Msg 
    = FetchTitle 
    | FetchSucceed String 
    | FetchFail Http.Error 


update : Msg -> Model -> (Model, Cmd Msg) 
update action model = 
    case action of 
    ... 

    FetchFail err -> 
     let 
     error = 
      decodeError error 
     in 
     ({ model | ok = error.ok, errorMessage = error.error}, Cmd.none) 

任何幫助表示讚賞。

+0

你'Error'類型別名似乎未使用。更好地移除它(從其他地方使用的問題)。 – farmio

回答

6

榆樹0.17:

的Http.Error類型爲聯合類型,如果有任何可以保持響應代碼。

類型錯誤 =超時 | NetworkError | UnexpectedPayload字符串 | BadResponse Int字符串

您可以通過err變量case來訪問它。

FetchFail err -> 
    case err of 
    BadResponse code error -> 
     -- handle error message 
    _ -> 
     -- other error 

http://package.elm-lang.org/packages/evancz/elm-http/3.0.1/Http#Error


隨着榆樹0.18,並過渡到elm-lang/http錯誤類型已被修改:

type Error 
    = BadUrl String 
    | Timeout 
    | NetworkError 
    | BadStatus (Response String) 
    | BadPayload String (Response String) 
+0

我得到'''無法找到模式'BadResponse' 20 | BadResponse代碼錯誤 - >錯誤 ^^^^^^^^^^^^^^^^^^^^^^ ''' – pietro909

+2

In Elm 0.17 [evancz/elm-http](http:// package .elm-lang.org/packages/evancz/elm-http/3.0.1/Http)。由於Elm 0.18 [elm-lang/http](http://package.elm-lang.org/packages/elm-lang/http/1.0.0/Http)是默認值。新模塊有不同的類型。請參閱[Http.Error](http://package.elm-lang.org/packages/elm-lang/http/1.0.0/Http#Error) – farmio

+0

謝謝,我已更新您的答案,因爲它是第一個結果當我搜索這個錯誤時得到:-) – pietro909