2016-10-24 2 views
3

Есть ли способ, которым мы можем сопоставить ошибку с ответом httpoison? Я делал этоpattern match HTTpoison response Elixir

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 исключение, а не возвращать одно, так что вам нужно использовать try ... rescue ...:

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 

Это, однако, не считается хорошим кодом, поскольку HTTPoison также get который возвращает {:ok, response} или {:error, error}, которые вы можете использовать в качестве следует:

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

Я только что использовал вторую часть .. спасибо :) – ijunaidfarooq

Смежные вопросы