模式匹配 HTTpoison 响应 Elixir
pattern match HTTpoison response Elixir
有什么方法可以匹配 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
我认为我做错了..有什么建议吗?
HTTPoison.get!
会 raise
一个例外,而不是 return 一个,所以你需要使用 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
,其中 returns {: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
有什么方法可以匹配 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
我认为我做错了..有什么建议吗?
HTTPoison.get!
会 raise
一个例外,而不是 return 一个,所以你需要使用 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
,其中 returns {: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