使用递归更新 API 调用的页码

Updating page number on API call with recursion

我正在进行 API 调用,而我使用的服务每页仅 returns 一定数量的结果(我需要所有结果,而不仅仅是第一页)。幸运的是,他们在 JSON 对象上有一个名为 "total_pages" 的键,它表示有多少页。还有一个 "current_page" 属性。您可以像这样在 URL 的末尾添加寻呼机:"example.com/endpoint&page=2"

我意识到获取所有页面的唯一方法是遍历 total_pages 号码并以某种方式使用新的寻呼机信息创建另一个对 api 的调用。

这可以通过递增 current_page 属性使用 for 或 while 循环来完成,但我似乎无法弄清楚如何使用递归来完成。我想出了一种方法来使用 Agent 来保存和更新 current_page 状态,但这似乎没有必要。

Agent.start(fn -> 1 end, name: current_page)
Agent.update(:current_page, fn curr_page -> state + 1 end)

有没有办法在 Elixir 中执行此操作,也许使用 cond 语句检查 current_page == total_pages 是否存在,如果不存在,则运行调用 [=30= 的函数]又是?

谢谢

是的,特工对此有点矫枉过正。一个简单的递归函数可以优雅地解决这个问题。这是一个可以帮助您入门的基本实现:

defmodule A do
  def fetch(current_page) do
    response = get("/?page=#{current_page}")
    if response.total_pages == current_page do
      :ok
    else
      fetch(current_page + 1)
    end
  end

  # Sample function that acts like an HTTP GET request.
  def get(url) do
    IO.puts "GET #{url}"
    %{total_pages: 5}
  end
end

A.fetch(1)

输出:

GET /?page=1
GET /?page=2
GET /?page=3
GET /?page=4
GET /?page=5

我们从第 1 页开始。获取页面内容后,我们检查当前页面是否等于响应中的 total_pages。如果是,我们停止,否则我们递归 current_page 设置为 current_page + 1.