我目前有一个在setInterval
方法中执行某些代码的函数。这是按预期工作的。问题是我有条件地执行此计时器中的代码。如果不满足条件,它将仍然等待超时,直到再次尝试。有没有一种“跳过”延迟的方法,只有在条件满足时才执行它。
您将在我的演示中注意到,在输出段落结果4和8之间存在长时间延迟(因为它在检查之间延迟)。我希望在整个过程中有一致的延迟。
DEMO 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);
答案 0 :(得分:0)
您无法更改间隔的延迟。要么像Kevin B所说的那样销毁并创建一个间隔,要么你使用setTimeout
,每次都要调用它,然后根据条件使用延迟或其他延迟。
/* ... */
if (conditionIsMet) intAdd = setTimeout(function() {}, 1000);
else intAdd = setTimeout(function() {}, 1);
/* ... */
示例here
答案 1 :(得分:0)
其他用户指出有多种方法。
我会使用while
。我把它放在一个驻留在循环中的函数中。您可以使用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)
}
循环执行此操作。这样就可以在条件满足时突破。你需要在每个循环上增加计时器。
小提琴https://jsfiddle.net/jdec4h0x/4/
#include <stdlib.h>
#include <stdio.h>
int main(){
char card_name[3];
puts("Enter the card_name: ");
scanf("%2s", card_name);
int val = 0;
if (card_name[0] == 'K'){
val = 10;
} else if (card_name[0] == 'Q'){
val = 10;
} else if (card_name[0] == 'J'){
val = 10;
} else if (card_name[0] == 'A'){
val = 11;
} else {
val = atoi(card_name);
}
printf("The card name value is %i\n", val);
return 0;
}