2016-05-23 4 views
10

私はElm 0.17 tutorial for HTTPでエクササイズを試みています。 gifの取得に失敗した場合は、エラーメッセージが表示されて失敗した原因をユーザーに知らせたいと思います。Http.Errorからエラーメッセージをどのように取得できますか?

私はあることを私のモデルを変更した:

type alias Model = 
    { topic : String 
    , gifUrl : String 
    , errorMessage : String 
    } 

とする更新に失敗フェッチ:

次のように機能 errorMessageがある
FetchFail error -> 
    (Model model.topic model.gifUrl (errorMessage error), Cmd.none) 

errorMessage : Http.Error -> String 
errorMessage error = 
    case error of 
    Http.Timeout -> 
     "Timeout" 
    Http.NetworkError -> 
     "Network Error" 
    Http.UnexpectedPayload _ -> 
     "UnexpectedPayload" 
    Http.BadResponse _ _ -> 
     "BadResponse" 

上記の機能は私にとっては不要なボイラープレートのようです。 Http.Errorを文字列に直接変換できる方法はありますか?

答えて

12

toStringを使用して何でも文字列に変換できます。

toString Timeout == "Timeout" 
toString NetworkError == "NetworkError" 
toString (UnexpectedPayload "Error") == "UnexpectedPayload \"Error\"" 
toString (BadResponse 500 "Error") == "BadResponse 500 \"Error\"" 

ちょうどtoStringerrorMessageへの呼び出しを交換し、あなたは完全にerrorMessageを取り除くことができます:それはあなたのケース文としてあなたにほぼ同じ出力が得られます

FetchFail error -> 
    (Model model.topic model.gifUrl (toString error), Cmd.none) 
+1

応答であった場合'BadResponse 400" "" {"errors":必須の引数がありません "" "" '、定型文@Martimatixは必須ですか?要するに、応答は「いずれかのエラーa」である。 –

+2

パラメータを省略して "BadResponse"を出力したい場合は、caseステートメントで明示的に呼び出す必要があります。アンダースコアキャッチオールの場合、デフォルトは 'toString'です。 –

関連する問題