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 并调用清除间隔的函数