我正在使用 Django 开发一个网站。我有大约 50 个函数。并且大约需要 1 分钟才能获得所有这些结果。问题是我在我的应用程序中使用了 heroku。Heroku 有 30 秒的时间来获取请求。有人建议我使用后台任务。现在我在 Python RQ 中使用后台作业。对于每个功能,我在 Views 中做了一个单独的任务。以下是其中一项任务的示例:task_robots_url = q.enqueue(Robots(url).get_url)robots_url = task_robots_url.result现在我需要检查模板中的工作是否完成。完成后,显示结果。我想每秒检查一次 JS 是否完成了工作。如果尚未完成 - 向用户显示“正在加载...”消息。如果完成 - 显示结果。这是我的 JS 代码: <script> var h1 = document.getElementById("h1"); var job_result = "{{ robots_url }}" var test = function () { if (job_result == "") { h1.innerText = "Waiting..."; } else if (job_result == "None") { h1.innerText = "Waiting ..."; } else if (job_result == undefined) { h1.innerText = "Waiting ..."; } else { clearInterval(inter); h1.innerText = job_result; } } var inter = setInterval(test, 1000); </script>但这不起作用。当结果页面开始时 - 我有一个空的结果。它显示等待。然后我没有结果。它仍然显示等待。但是现在等待之后没有结果。在 Python RQ 的文档中,据说我应该在我的代码中放置几秒钟的 time.sleep()。如果我把 time.sleep(2) - 我得到了结果。但是,如果我为我的 50 个函数中的每一个添加 time.sleep(2) - 我将得到 100 秒。Heroku中的限制只有30秒......所以我需要在没有sleep()的情况下检查并显示结果......
1 回答
阿晨1998
TA贡献2037条经验 获得超6个赞
setInterval() 方法以指定的时间间隔(以毫秒为单位)调用函数或计算表达式。
setInterval() 方法将继续调用该函数,直到调用 clearInterval() 或关闭窗口。
您多次调用 setInterval 最终导致浏览器崩溃。
假设 job_result 值在 10 秒后发生变化,您可以编写以下代码:
var job_result = {{ job_result }};
var loadingMessage = function (){
if (!job_result) {
document.write("Loading ...");
}
else {
return
}
}
setInterval(() => loadingMessage, 1000);
您可以调用 return 以停止运行间隔,也可以使用 setTimeout 并调用清除间隔的函数
添加回答
举报
0/150
提交
取消