首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模式匹配HTTpoison响应

模式匹配HTTpoison响应
EN

Stack Overflow用户
提问于 2016-10-24 11:26:51
回答 1查看 972关注 0票数 2

我们有什么方法可以与httpoison的错误响应匹配吗?我在做这件事

代码语言:javascript
复制
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,给了我错误

代码语言:javascript
复制
** (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

我觉得我做错了..。有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-24 11:39:30

HTTPoison.get!raise异常,而不是返回异常,因此需要使用try ... rescue ...

代码语言:javascript
复制
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},您可以如下所示:

代码语言:javascript
复制
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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40217199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档