JavaScript while loop + setInterval 在 Django 中不起作用

我正在使用 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()的情况下检查并显示结果......


繁华开满天机
浏览 165回答 1
1回答

阿晨1998

setInterval() 方法以指定的时间间隔(以毫秒为单位)调用函数或计算表达式。setInterval() 方法将继续调用该函数,直到调用 clearInterval() 或关闭窗口。您多次调用 setInterval 最终导致浏览器崩溃。假设 job_result 值在 10 秒后发生变化,您可以编写以下代码:var job_result = {{ job_result }};var loadingMessage = function (){&nbsp; &nbsp; if (!job_result) {&nbsp; &nbsp; &nbsp; &nbsp; document.write("Loading ...");&nbsp; &nbsp; }&nbsp; &nbsp; else {&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp; &nbsp; }}setInterval(() => loadingMessage, 1000);您可以调用 return 以停止运行间隔,也可以使用 setTimeout 并调用清除间隔的函数
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript