我对javascript很新,我试图学习时间事件。我尝试实现一个功能,该功能需要数字并执行{strong>数次的function1
,然后执行function2
。但是在每次执行之间,我都希望有一个设定的间隔。例如,function1
打印" foo"和function2
打印" bar"。如果功能的输入数字是" 3" &安培;间隔是5秒,最后的打印应该是foo,foo,foo,bar,foo,foo,foo,bar ....每隔5秒钟。
我已尝试for
循环和while
循环。
var i=0;
while (i < 4){//number of times to repeat "function"
if (i%4 == 0){
setInterval(function(){
console.log("bar");
},2000);//interval between functions
}
else{
setInterval(function(){
console.log("foo");
},2000);//interval
}
i++;
if (i==4) i = 0;
}
答案 0 :(得分:2)
你错过了很多事情。
setInterval
“设置”将来某个时间执行的异步任务(代码中为2000ms)。调用完成后,执行立即继续到下一行。此外,如果您希望任务只运行一次,则应使用setTimeout
。 setInterval
导致任务以无限的“循环”执行(至少直到clearInterval
被调用)。while
条件是多余的。因为你在while块中重置它(在最后if
中),我永远不会等于或高于4。这似乎是故意的,但是根本没有理由(使用while(true)
)做你想做的事的解决方案可能是:
var maxPrints = 20; // Otherwise this will never end...
function nextInterval(i) {
console.log(i == 0 ? 'bar' : 'foo');
if(--maxPrints > 0)
setTimeout(function() { nextInterval((i + 1) % 4); }, 2000);
}
nextInterval(0);
或者您只需拨打一次setInterval
即可完成此操作:
var maxPrints = 20; // Otherwise this will never end...
var i = 0, interval;
function nextInterval() {
console.log((i++ % 4) == 0 ? 'bar' : 'foo');
if(--maxPrints <= 0)
clearInterval(interval);
}
interval = setInterval(nextInterval, 2000);
答案 1 :(得分:1)
我接近这个的方法是制作一个按顺序调用的函数运行列表:
var fns = Array.apply(null, new Array(3)).map(function() {
return foo;
}).concat([bar]);
&#13;
填充该数组相对容易:
expListView.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
Log.e("child", (listDataHeader.get(groupPosition)).get(childPosition));
return false;
}
});
答案 2 :(得分:0)
function fooBar(foo,delay){
var i=1;
setInterval(function(){
if (i%(foo+1) ==0){
console.log("BAR");
}
else {
console.log("foo");
}
i++;
//set i back to 0. not necessary, though
if (i==(foo+1)){
i=0;
}
},delay);
}
fooBar(3,1000);//number of "foo"s , delay in ms
答案 3 :(得分:0)
尝试
var i = 0,
num = 3,
interval = setInterval(function() {
if (i < num) {
console.log('foo')
} else {
console.log('bar')
}
if (i++ == num) {
i = 0;
}
}, 500);
答案 4 :(得分:0)
而不是setinterval到两个函数,setinterval代替一个有条件地调用两个函数的函数。