使用递归更新 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
.
我正在进行 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
.