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

检查Javascript进程是否已在运行

检查Javascript进程是否已在运行

慕哥6287543 2021-03-30 21:14:59
我有一个进度条脚本,它轮询一个转储一些json数据的URL。然后,脚本根据所述json的内容(包括进度条)更新一些html值。这是代码的简化版本:function update_progress(status_url, index) {  bar_id = document.getElementById(String('bar' + index));  stage_id = document.getElementById(String('stage' + index));  $.getJSON(status_url, function(data) {    percent = parseInt(data['current'] * 100 / data['total']);    // change progress bar and stage_id values    bar_id.innerHTML = (percent + '%');    bar_id.style.width = (percent + '%');    stage_id.title = (data['status']);    stage_id.value = (data['status']);    stage_id.innerHTML = (data['status']);    // if state is unexpected then end poll    if (data['state'] != 'PENDING' && data['state'] != 'PROGRESS' && data['state'] != "COMPLETE") {      stage_id.innerHTML = (data['state']);          // otherwise keep polling every 1.5 seconds    } else {      setTimeout(function() {        update_progress(status_url, index);      }, 1500);    }}有时,status_url如果尚未编译json数据,则可能会返回500错误。因此,我有一个按钮,可以通过update_progress再次调用来重新启动此轮询。问题: 如果用户单击“重新开始投票”按钮,则将有两个针对该活动的活动投票status_url。一次可能会有许多不同的民意调查正在进行status_url-数量越多,响应速度就越慢。所以我想避免能够轮询已经进行的事情问题:是否可以检查JS中是否已在进行具有相同值的进程?我知道这是低效的,并且在某个时候我将完全放弃JS来使用该轮询系统-但是,在实现此功能之前,我需要对当前版本进行一些快速的效率修补。
查看完整描述

2 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

您可以将代码分隔在多个回调上,这些回调将在成功,失败时执行,而其他回调则始终执行,无论成功或失败。然后,您可以猜测用户何时单击“提交”按钮并将其禁用,然后在请求完成后再次启用它。


var ongoing = true; // Disable submit button

$.getJSON(status_url, function(data) {

  // Your success code here

})

.fail(jqXHR, textStatus, errorThrown) {

  // Your error/retry code here

})

.always(function() {

   ongoing = false; // Enable submit button

});


查看完整回答
反对 回复 2021-04-08
  • 2 回答
  • 0 关注
  • 241 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号