我目前有一个在< code>setInterval方法中执行一些代码的函数。这是预期的工作。问题是我在这个定时器中有条件地执行代码。如果不满足条件,它仍然会等待超时,直到再次尝试。有没有办法“跳过”延迟,只在条件满足时执行。
您会注意到在我的演示中,输出段落结果 4 和 8 之间存在长时间的延迟(因为它在检查之间延迟)。我希望在整个过程中始终如一地拖延。
演示https://jsfiddle.net/jdec4h0x/
var intAdd = setInterval(function() {
refIndex++
if(refIndex >= predefinedMaxLimit) {
refIndex = 0;
loopedThrough = true;
}
// if this exists then increment refIndex and try again
if (loopedThrough || !$(".myclass[data-mydata1='" + predefinedData2 + "'][data-mydata2='" + refIndex + "']").length) {
counter++;
$('p').last().after('<p>IN Cond Ref = ' + refIndex + '</p>');
// ** js code within this tiemout **
if (counter >= predefinedOutputP) clearInterval(intAdd);
}
}, 500);
您无法更改间隔的延迟。要么像 Kevin B 所说的那样销毁并创建一个间隔,要么使用 setTimeout
,无论如何你都必须每次调用它,然后根据条件使用延迟或其他延迟。
/* ... */
if (conditionIsMet) intAdd = setTimeout(function() {}, 1000);
else intAdd = setTimeout(function() {}, 1);
/* ... */
这里有一个例子
其他用户指出了多种方法。
我会使用<code>setTimeout</code>。我会把它放在一个循环中的函数中。您可以使用while
循环来完成此操作。这样,当条件满足时,就有能力爆发。您需要在每个循环中增加计时器。
小提琴 https://jsfiddle.net/jdec4h0x/4/
while (progress) {
refIndex++
if (refIndex >= predefinedMaxLimit) {
refIndex = 0;
loopedThrough = true;
}
if (loopedThrough || !$(".myclass[data-mydata1='" + predefinedData2 + "'][data-mydata2='" + refIndex + "']").length) {
counter++;
myTimer = myTimer + 500;
console.log(refIndex);
myFunction(refIndex);
if (counter >= predefinedOutputP) {
$('p').last().after('<p>Cleared Interval</p>');
progress = false;
}
}
}
function myFunction(ref) {
setTimeout(function() {
$('p').last().after('<p>IN Cond Ref = ' + ref + '</p>');
// ** js code within this tiemout **
}, myTimer)
}