为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁华开满天机 2022-10-13 10:58:10
我正在使用 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 并调用清除间隔的函数


查看完整回答
反对 回复 2022-10-13
  • 1 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信