我想将函数调用特定次数。我希望我希望在一个数组中调用我的函数的次数如下所示。我有一个遍历数组的for循环,我试图调用名为&#34的函数;函数" 与数组项中的数字一样多的次数。所以数组中的第一项是8,所以我首先想要"函数"函数被调用8次,这意味着我应该看到警告消息"函数"将显示8次然后2次,因为2是阵列中的下一项,然后是15次。我还想在每组电话之间暂停片刻。因此,在调用该函数8次之后,它会在调用函数2次之前暂停片刻,然后再调用函数15次并打开和打开。到目前为止,这是我的代码。
var thearray = ['8','2','15'];
for(j=0; j < thearray.length; j++){
num = thearray[j];
var counter = 1;
(function foo() {
thefunction();// function I'm calling
if (counter < num) {
counter++;
setTimeout(foo, 400);
}
})();
}
function thefunction (){
alert('test');
}
答案 0 :(得分:2)
您不能将for
循环与变量j
一起使用,并使用异步setTimeout()
。 for
循环将运行完成,j
变量在setTimeout()
运行之前已经增加。这是尝试使用异步函数中的for
循环索引的典型问题。
我并不完全明白您要完成的工作,因此我不确定要提供什么样的代码。你有三个价值观。您是否尝试执行两个循环,一个用于遍历数组,另一个用于处理每个数组值?你能更好地解释最终输出应该是什么吗?
我在这里猜测,但如果您要做的是将您的功能召唤8次,然后暂停,然后暂停2次,然后暂停15次,然后完成,您可以做这样:
function runArray(arr, fn) {
// initialize array index - can't use for loop here with async
var index = 0;
function next() {
var cnt = +arr[index];
for (var i = 0; i < cnt; i++) {
fn(index, cnt);
}
// increment array index and see if there's more to do
++index;
if (index < arr.length) {
setTimeout(next, 400);
}
}
// start the whole process if the array isn't empty
if (arr.length) {
next();
}
}
var theArray = ['8','2','15'];
runArray(theArray, thefunction);
工作演示:http://jsfiddle.net/jfriend00/Loycmb3b/
仅供参考,如果您在阵列中放置的内容是用作数字,那么最好将它们作为数字放入数组中,而不是字符串。我已经使我的代码工作方式,但它更高效,只是更好的代码,当你的意思是数字时使用数字。