我必须使用外部API来生成屏幕截图。在第一步中,我触发屏幕截图的生成并收到job_id
。比我必须等待,并可以下载给定的job_id
截图。不幸的是,我不知道我需要等多久。有时结果在10秒后准备就绪,有时不成功。如果它没有准备好,功能image_url/1
返回nil
。如果准备就绪,则返回图片网址。递归调用外部API
目前我使用睡眠45秒,这是不理想的。
我不明白我怎么可以使用递归的概念来实现该功能generate_screenshot/1
,首先运行new_job_id(url)
比尝试image_url/1
10次,或直至它不是nil
10秒的睡眠。
我该如何解决这个递归?
def generate_screenshot(url) do
job_id = new_job_id(url)
:timer.sleep(45000)
image_url(job_id)
end
defp new_job_id(url) do
# This function triggers a process on
# an external web server an returns
# the job_id of it.
12345
end
defp image_url(job_id) do
# This function fetches something from
# a webserver. The result is nil or
# a URL of an image.
[...]
end
您可能想看看['ElixirRetry'](https://github.com/safwank/ElixirRetry)。 – mudasobwa