2016-10-24 6 views
3

httpoisonのエラーレスポンスと一致するパターンはありますか?私はこのパターンマッチングHTTpoisonレスポンスエリクシル

case HTTPoison.get!(url, [], []) do 
    %HTTPoison.Error{reason: reason} -> 
    IO.inspect "Media: #{reason}!" 
    :timer.sleep(:timer.seconds(3)) 
    do_loop(starting, ending, interval, camera_exid) 
    response -> 
    upload(response.status_code, response.body, starting, camera_exid) 
    do_loop(starting + interval, ending, interval, camera_exid) 
end 

をしていたが、それはtimeoutをキャッチし、

私は間違った方法でそれをやっていると思う
** (HTTPoison.Error) :timeout 
    (httpoison) lib/httpoison.ex:66: HTTPoison.request!/5 
    (extractor) lib/snapshot/snap_extractor.ex:67: Extractor.SnapExtractor.do_loop/4 
     (elixir) lib/enum.ex:651: Enum."-each/2-lists^foreach/1-0-"/2 
     (elixir) lib/enum.ex:651: Enum.each/2 

..任意の提案として、私にエラーを与えていませんでしたか?あなたが使用する必要があるので、

答えて

3

HTTPoison.get!意志raise例外ではなく、1を返すtry ... rescue ...:これは、しかし、また、あなたのように使用することができます{:ok, response}または{:error, error}を返すgetを持ってHTTPoisonので、良いコードとはみなされません

try do 
    response = HTTPoison.get!(url, [], []) 
    upload(response.status_code, response.body, starting, camera_exid) 
    do_loop(starting + interval, ending, interval, camera_exid) 
rescue 
    %HTTPoison.Error{reason: reason} -> 
    IO.inspect "Media: #{reason}!" 
    :timer.sleep(:timer.seconds(3)) 
    do_loop(starting, ending, interval, camera_exid) 
end 

次のようになります。

case HTTPoison.get(url, [], []) do 
    {:ok, response} -> 
    upload(response.status_code, response.body, starting, camera_exid) 
    do_loop(starting + interval, ending, interval, camera_exid) 
    {:error, %HTTPoison.Error{reason: reason}} -> 
    IO.inspect "Media: #{reason}!" 
    :timer.sleep(:timer.seconds(3)) 
    do_loop(starting, ending, interval, camera_exid) 
end 
+0

私はちょうど2番目の部分を使用しました.. thanks :) – ijunaidfarooq