Elixir 正在发送HTTPoison请求!以一种试一试的方式长生不老药

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 问题是:我使用的库正在执

我试图用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
问题是:我使用的库正在执行
请求而不是
请求
,并且在出现状态代码故障时不会给出任何响应,它会引发异常
超时
,如下所示

** (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(客户端,上传图片路径,图片路径)
我怎么能发现这个错误呢?只要把那一行放在
里面试试看。如果该函数调用
请求,它应该可以工作