【发布时间】:2023-03-23 15:43:02
【问题描述】:
我必须使用外部 API 来生成屏幕截图。在第一步中,我触发屏幕截图的生成并收到job_id。比我必须等待并且可以使用给定的job_id 下载屏幕截图。不幸的是,我不知道我要等多久。有时结果会在 10 秒后准备好,有时则不然。如果它没有准备好,函数image_url/1 返回nil。如果它准备好了,它会返回图像 URL。
目前我使用睡眠 45 秒,这是次优的。
我不明白如何使用递归的概念来实现函数generate_screenshot/1,首先运行new_job_id(url),然后尝试image_url/1 10 次,其间或直到它不是@ 987654329@.
如何通过递归解决这个问题?
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。