2017-05-01 18 views
0

再帰の理解に追いつくことはあります。私はこのエリクシールの再帰関数を終了

def query_url(id,page_number) do 
returned_response = HTTPoison.get! "https://some_web_page/#{id}/? pageNumber=#{page_number}" 
    case returned_response.status_code do 
    200 -> 
     {:ok,returned_response.body} 
    _ -> 
     {:error,:not_found} 
    end 
end 

んだ...と

def recursive_function(id,page_number) do 
    case query_url(id,page_number) do 
    {:ok,response} -> 
     non_recusive_function(response) 
     recursive_function(id,page_number + 1) 
    {:error, :not_found} -> 
     IO.puts "Exited" 
    end 
end 

recursive_function(1234,1)と仮定すると、それは再帰関数は一度query_url/2戻り{:error, :not_found}出るだろうが、それは場合、再帰呼び出しではないというのが私の考えていました終了しません。

私がしようとしているのは、200ステータスが返されていれば、特定のURLへのリクエストを行い、ステータスが返されていないときに終了することです。 @Dogbertへ

+0

caseを置き換えます。あなたは 'IO.inspect'をすべての戻り値で試して、エラーケースを取り戻すことができますか? – Dogbert

+0

@Dogbert、IssueはAPIプロバイダとの関係で何らかの理由で、今まで404を返していたERROR MESSAGEキーで200を返し始めました。ありがとう! – user1232968

+0

発見した解決策を回答に投稿し、それを回答としてマークして、他の人が質問が現在閉じられているのを見ることができます。 –

答えて

0

おかげで、問題は、彼らがこれまで404を返さERRORARRAYマップでERRORMESSAGEキーで200を返す始め、何らかの理由で、APIプロバイダとありました。

だからコードが私には正しいようcond

cond do 
    returned_response.status_code == 200 and not returned_response["ERRORARRAY"] == []) -> 
    {:ok,returned_response.body} 
    returned_response.status_code == 400 -> 
    {:error,:not_found} 

    true -> 
     {:error,:not_found} 
end