【问题标题】:Elixir "case clause error" while pattern matching HTTPoison response模式匹配 HTTPoison 响应时 Elixir “case 子句错误”
【发布时间】:2018-01-31 22:04:42
【问题描述】:

我正在使用 Httpoison 执行获取请求,并且我想使用 case 语句对响应进行模式匹配。代码如下:

  def current() do
    case HTTPoison.get!(@api_url) do
      {:ok, %HTTPoison.Response{body: body, status_code: 200}} ->
        IO.puts body
      {:error, %HTTPoison.Error{reason: reason}} ->
        IO.inspect reason
    end
  end

当状态码为 200 时,打印正文。 出现错误时,检查原因。

我从服务器得到响应,

%HTTPoison.Response{body: "{\"USD\":10067.08}", headers: <<removed for readability>>, status_code: 200}

而错误,(CaseClauseError) no case clause matching:

当我收到正文和状态码为 200 的响应时,为什么会收到“无子句”错误?

【问题讨论】:

    标签: elixir phoenix-framework httpoison


    【解决方案1】:

    问题是get之后的!

    HTTPoison.get!(@api_url) 将返回 %HTTPoison.Response{body: body, ...} 或引发异常。

    如果您想要{:ok, %HTTPoison.Response{body: body, ...},请改用HTTPoison.get(@api_url)(不带!)。

    要么:

    def current() do
        case HTTPoison.get(@api_url) do
          {:ok, %HTTPoison.Response{body: body, status_code: 200}} ->
            IO.puts body
          {:error, %HTTPoison.Error{reason: reason}} ->
            IO.inspect reason
        end
    end
    

    def current() do
        %HTTPoison.Response{body: body, status_code: 200}} = HTTPoison.get!(@api_url) 
        IO.puts body           
    end
    

    【讨论】:

      猜你喜欢
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-06
      • 1970-01-01
      • 2020-04-19
      相关资源
      最近更新 更多