gpt4 book ai didi

javascript - 检查 Javascript 进程是否已经在运行

转载 作者:行者123 更新时间:2023-12-01 01:08:29 25 4
gpt4 key购买 nike

免责声明:我对 javascript 完全是“新手”,所以请原谅绝对业余的代码。

我有一个进度条脚本,用于轮询转储一些 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);
}
}

有时,如果 json 数据尚未编译,status_url 可能会返回 500 错误。因此,我有一个按钮可以通过再次调用 update_progress 来重新启动此轮询。

问题:如果用户点击“重新启动投票”按钮,则同一 status_url 将会有两个事件投票。

可以同时对一堆不同的 status_url 进行许多轮询 - 轮询越多,响应就越慢。

所以我想避免能够轮询已经正在进行的事情

问题:有没有办法检查 JS 中是否已经存在具有相同值的进程?

我知道这是低效的,并且在某个时候我将完全放弃这个轮询系统的 JS - 但是在我开始之前我需要对当前版本进行一些快速的效率修补。

提前致谢

最佳答案

 取消 JavaScript 间隔

您可以将 setTimeout 分配给变量:

vartimer = setTimeout(...updateProgress...);

然后,当用户单击按钮刷新民意调查时,您可以执行以下操作:

clearTimeout(定时器)

删除原来的超时进程,然后创建另一个。

我认为这回答了你的问题。但是:

 无需强制用户手动重新尝试轮询。

如果 getJson 调用由于 500 错误而失败,您可以继续轮询,而不是清除并再次启动轮询。现在,我不习惯 getJSON 语法,但从我读到的 in this answer ,您将执行如下操作:

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);
}
})
.done(() => {}) // is this needed? I really don't know to be honest,
// maybe you can skip this right away
.fail(() => {
setTimeout(function() {
update_progress(status_url, index);
}, 1500); // we keep polling if the request fail!
})
}

关于javascript - 检查 Javascript 进程是否已经在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55382984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com