JavaScript while 循环 + setInterval 在 Django 中不起作用
JavaScript while loop + setInterval doesn't work in Django
我正在使用 Django 开发一个网站。我有大约 50 个函数。获得所有结果大约需要 1 分钟。
问题是我的应用程序使用了 heroku。而 heroku 有 30 秒的限制来获取请求。我被建议使用后台任务。现在我在 Python RQ 中使用后台作业。对于每个功能,我在视图中做了一个单独的任务。这是其中一项任务的示例:
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>
但这不起作用。当结果页面开始时 - 我得到一个空结果。并显示等待。然后我有 None 结果。它仍然显示等待。但是现在等了没有结果
在 Python RQ 的文档中说我应该在我的代码中放置 time.sleep() 几秒钟。如果我输入 time.sleep(2) - 我得到了结果。但是如果我为我的 50 个函数中的每一个都设置 time.sleep(2) - 我将得到 100 秒。而 Heroku 中的限制只有 30 秒...所以我需要在没有 sleep() 的情况下检查并显示结果...
setInterval() 方法以指定的时间间隔(以毫秒为单位)调用函数或计算表达式。
setInterval() 方法将继续调用该函数,直到调用 clearInterval() 或 window 关闭。
您多次调用 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 并调用清除间隔的函数
我正在使用 Django 开发一个网站。我有大约 50 个函数。获得所有结果大约需要 1 分钟。
问题是我的应用程序使用了 heroku。而 heroku 有 30 秒的限制来获取请求。我被建议使用后台任务。现在我在 Python RQ 中使用后台作业。对于每个功能,我在视图中做了一个单独的任务。这是其中一项任务的示例:
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>
但这不起作用。当结果页面开始时 - 我得到一个空结果。并显示等待。然后我有 None 结果。它仍然显示等待。但是现在等了没有结果
在 Python RQ 的文档中说我应该在我的代码中放置 time.sleep() 几秒钟。如果我输入 time.sleep(2) - 我得到了结果。但是如果我为我的 50 个函数中的每一个都设置 time.sleep(2) - 我将得到 100 秒。而 Heroku 中的限制只有 30 秒...所以我需要在没有 sleep() 的情况下检查并显示结果...
setInterval() 方法以指定的时间间隔(以毫秒为单位)调用函数或计算表达式。
setInterval() 方法将继续调用该函数,直到调用 clearInterval() 或 window 关闭。
您多次调用 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 并调用清除间隔的函数