如何阻止此 setTimeout 函数运行
How can I stop this setTimeout function from running?
我使用以下函数来检查 JSON 文件的状态。它每 8 秒运行一次(使用 setTimeout)以检查文件是否已更改。 一旦 JSON 的状态变为"成功",我就不想再继续调用该函数了。 有人可以告诉我如何做到这一点吗? 我怀疑它涉及使用 clearTimeout,但我不确定如何实现这一点。
干杯!
$(function() {
var checkBookStatus = function() {
var job_id = "#{@job.job_id}";
var msg = $('.msg');
var msgBuilding = $('#msg-building');
var msgQueuing = $('#msg-in-queue');
var msgSuccessful = $('#msg-successful-build');
var msgError = $('#msg-error');
$.ajax({
url: '/jobs/'+job_id+'/status.json',
datatype: 'JSON',
success:function(data){
if (data.status == "failure") {
msg.hide();
msgError.show();
}
else if (data.status == "#{Job.queue}") {
msg.hide();
msgQueuing.show();
}
else if (data.status == "#{Job.building}") {
msg.hide();
msgBuilding.show();
}
else if (data.status == "#{Job.failure}") {
msg.hide();
msgError.show();
}
else if (data.status == "#{Job.success}") {
msg.hide();
msgSuccessful.show();
}
},
}).always(function () {
setTimeout(checkBookStatus, 8000);
});
};
checkBookStatus();
});
t = setTimeout(checkBookStatus, 8000);
当您决定停止超时时,请使用此clearTimeout(t);
。
使用clearTimeout
例如,您定义了:
id = setTimeout(checkBookStatus, 8000);
然后,您可以通过以下方式删除此功能:
clearTimeout(id)
在最后调用checkBookStatus()
之前,再打一个电话:var interval = setInterval(checkBookStatus, 8000);
。 然后成功后你可以clearInterval(interval)
.
不要使用setTimeout
进行迭代。
很多答案都建议只使用clearTimeout()
但是,您在超时到期后检查状态,没有要清除的超时。 您不需要在 always()
函数中调用 setTimeout()
,而不是清除任何内容。 因此,我想您可以重新检查always()
函数中的状态,但您的data
对象不在那里范围内。 最好只在checkBookStatus()
函数之外使用setInterval()
。
$(function() {
var checkBookStatus = function() {
var job_id = "#{@job.job_id}";
var msg = $('.msg');
var msgBuilding = $('#msg-building');
var msgQueuing = $('#msg-in-queue');
var msgSuccessful = $('#msg-successful-build');
var msgError = $('#msg-error');
$.ajax({
url: '/jobs/'+job_id+'/status.json',
datatype: 'JSON',
success:function(data){
if (data.status == "failure") {
msg.hide();
msgError.show();
}
else if (data.status == "#{Job.queue}") {
msg.hide();
msgQueuing.show();
}
else if (data.status == "#{Job.building}") {
msg.hide();
msgBuilding.show();
}
else if (data.status == "#{Job.failure}") {
msg.hide();
msgError.show();
}
else if (data.status == "#{Job.success}") {
msg.hide();
msgSuccessful.show();
clearInterval(interval);
}
}
});
};
var interval = setInterval(checkBookStatus, 8000);
checkBookStatus();
});
使用之前由 setTimeout
返回的值调用clearTimeout
。这将为您提供类似以下内容:
$(function() {
var timeoutID;
var checkBookStatus = function () {
[…]
else if (data.status == "#{Job.success}") {
clearTimeout(timeoutID);
[…]
}).always(function () {
timeoutID = setTimeout(checkBookStatus, 8000);
[…]
<</div>
div class="answers"> 当你使用 setTimeout
时,像这样使用:
var myTime = setTimeout(checkBookStatus, 8000);
清除它只是:
clearTimeout(myTime);
以下内容应该可以工作...
setTimeout 函数返回 setTimeout 函数的实例。将此值保留在变量中,并在要防止事件再次触发时将其传递给函数 clearTimeout。
即
var t = setTimeout(1000, someFunction);
...
//after you no longer need the timeout to fire, call
clearTimeout(t);
- 关注函数运行过的表单字段(新手)
- 在函数运行时显示对话
- Javascript - 加载函数运行时未定义的变量
- Javascript变量在函数运行后不断重置自身
- 如何让 setTimeout 函数运行,然后停止使用循环
- 如何在函数运行之前隐藏 CSS
- 使用 .on 函数运行 jQuery 声明函数
- 在函数运行期间关闭 onClick
- jQuery停止函数运行两次
- Javascript:如何在函数运行完成之前对文档进行更改
- nodejs - 为什么我的异步函数运行两次
- 在传递值后停止函数运行
- 如何在 javascript 中的函数中将字符串作为函数运行
- 如何停止计时器函数运行
- 在浏览器空闲后保持设置超时函数运行
- JQuery:阻止一个函数运行,直到满足另一个函数条件“X”时间
- Angular 提供程序服务需要 init 函数运行一次
- 更新 Angular $interval 中的变量会导致其他函数运行
- 如何阻止此 setTimeout 函数运行
- 传入函数数组作为参数,对于函数中的每个函数运行函数