在Javascript循环中等待
我有一个这样设置的函数在Javascript循环中等待,javascript,loops,delay,wait,Javascript,Loops,Delay,Wait,我有一个这样设置的函数 awesomeFirePenguin: function(){ // function does some stuff, not important }, for (var i = 0; i < n; i++){ this.awesomeFirePenguin(); } 我把它叫做这样的for循环 awesomeFirePenguin: function(){ // function does some stuff, no
awesomeFirePenguin: function(){
// function does some stuff, not important
},
for (var i = 0; i < n; i++){
this.awesomeFirePenguin();
}
我把它叫做这样的for循环
awesomeFirePenguin: function(){
// function does some stuff, not important
},
for (var i = 0; i < n; i++){
this.awesomeFirePenguin();
}
我试着用
for (var i = 0; i < n; i++){
window.setTimeout(this.awesomeFirePenguin(), 100);
}
和window.setIntervalthis.awesomeFirePenguin,100;,但是这两个函数都只执行一次。setTimeout和setInterval可以将函数作为参数,但您所做的是调用它们。因此,他们接收的不是函数,而是作为参数的返回值
如果要延迟堆栈,可以将超时延迟乘以当前所在的循环索引
for (var i = 0; i < n; i++){
window.setTimeout(this.awesomeFirePenguin.bind(this), 100 * i);
}
setTimeout和setInterval可以将函数作为参数,但您所做的是调用它们。因此,他们接收的不是函数,而是作为参数的返回值
如果要延迟堆栈,可以将超时延迟乘以当前所在的循环索引
for (var i = 0; i < n; i++){
window.setTimeout(this.awesomeFirePenguin.bind(this), 100 * i);
}
答案可能是最简单的。您还可以使用异步执行库,如,在其中您可以将代码编写为:
var clumpy = new Clumpy({delay: 100});
var i;
clumpy.for_loop(
function() { i = 0; },
function() { return i < n; },
function() { ++i; },
this.awesomeFirePenguin
);
可以使用setInterval而不是setTimeout来编写一些东西,但这并不容易理解,尽管它可能消除了递归调用。可能是最简单的。您还可以使用异步执行库,如,在其中您可以将代码编写为:
var clumpy = new Clumpy({delay: 100});
var i;
clumpy.for_loop(
function() { i = 0; },
function() { return i < n; },
function() { ++i; },
this.awesomeFirePenguin
);
可以使用setInterval而不是setTimeout来编写某些内容,但这并不容易理解,尽管它可能会消除递归调用。可能需要包装函数或使用.bind来保留上下文this@finrod:没问题,欢迎来到StackOverflow!如果还没有,请查看quick.bind,这可能是包装函数或使用.bind来保留上下文所必需的this@finrod:没问题,欢迎来到StackOverflow!如果您还没有,请查看quick。我的问题的独特之处在于我设置函数的方式,我无法更改。如果我在另一个问题中使用解决方案,我会在问题的结尾描述我的问题。我的问题的独特之处在于我设置函数的方式,我无法改变这一点。如果我在另一个问题中使用解决方案,我会在我的问题的结尾描述我的问题。递归的好,有趣的用法。递归的好,有趣的用法。