Elixir 正在发送HTTPoison请求!以一种试一试的方式长生不老药
我试图用Elixir Dropbox包发送一个POST请求,虽然很简单Elixir 正在发送HTTPoison请求!以一种试一试的方式长生不老药,elixir,Elixir,我试图用Elixir Dropbox包发送一个POST请求,虽然很简单 case ElixirDropbox.Files.upload(client, upload_image_path, image_path) do {{:status_code, _}, {:error, error}} -> Logger.debug "Error while uploading. Error: #{inspect error}" _ -> :noop end 问题是:我使用的库正在执
case ElixirDropbox.Files.upload(client, upload_image_path, image_path) do
{{:status_code, _}, {:error, error}} -> Logger.debug "Error while uploading. Error: #{inspect error}"
_ -> :noop
end
问题是:我使用的库正在执行请求代码>而不是请求
,并且在出现状态代码故障时不会给出任何响应,它会引发异常超时
,如下所示
** (HTTPoison.Error) :timeout
(httpoison) lib/httpoison.ex:66: HTTPoison.request!/5
(elixir_dropbox) lib/elixir_dropbox.ex:36: ElixirDropbox.post_request/4
(evercam_media) lib/evercam_media/snapshot_extractor/extractor.ex:132:
我们如何处理这种情况?在try
,catch
,rescue
我只想做的是:在任何异常或失败的情况下,从dropbox API,我想再次尝试上传,让我们说5次
defp upload_image("true", image_path, upload_image_path) do
client = ElixirDropbox.Client.new(System.get_env["DROP_BOX_TOKEN"])
case ElixirDropbox.Files.upload(client, upload_image_path, image_path) do
{{:status_code, _}, {:error, error}} -> Logger.debug "Error while uploading. Error: #{inspect error}"
_ -> :noop
end
end
您可以使用try
/rescue
捕获此错误:
try do
HTTPoison.request!(...)
rescue
HTTPoison.Error ->
# the request raised an error
end
什么是ElixirDropbox.Files.upload
返回?您在该模式中有{:error,error}
,但您是说函数会抛出错误而不是返回它?事情是这样的。它不会返回这样的任何东西,只是这个错误,根据包代码,它应该返回这样的元组,但它不会,你可以称之为错误的部分。我只想通过Exception处理timout错误我没有直接执行HTTPoison.request!但是它的ElixirDropbox.Files.upload(客户端,上传图片路径,图片路径)
我怎么能发现这个错误呢?只要把那一行放在里面试试看。如果该函数调用请求,它应该可以工作代码>。