javascript - 我怎样才能让这个函数被调用特定次数?

标签 javascript

我想调用一个函数特定次数。我希望我的函数在数组中被调用的次数如下所示。我有一个遍历数组的 for 循环,我正在尝试调用名为“thefunction”的函数 与数组项中的数字一样多。所以数组中的第一项是 8,所以我首先希望“thefunction”函数被调用 8 次,这意味着我应该看到警告消息“thefunction”将显示 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');
}

最佳答案

您不能将 for 循环与变量 j 一起使用并使用异步 setTimeout()for 循环将运行完成,并且 j 变量在 setTimeout() 运行之前已经增加。这是尝试在异步函数中使用 for 循环索引的经典问题。

我不明白你想要完成什么,所以我不确定要建议什么代码。你有三个值(value)观。您是否尝试执行两个循环,一个遍历数组,一个处理每个数组值?你能更好地解释一下最终输出应该是什么吗?


我在这里猜测,但如果你想做的是调用你的函数 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/

仅供引用,如果您要放入数组中的内容要用作数字,最好将它们作为数字而不是字符串放入数组中。我已经让我的代码以任何一种方式工作,但是当你指的是数字时,使用数字的代码效率更高,代码也更好。

关于javascript - 我怎样才能让这个函数被调用特定次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25319891/

相关文章:

javascript - 如何从给定字符串中删除带有额外分隔符的单词?

javascript - 使用 2 个 Controller 管理工厂 JSON $http 数据

javascript - 模态中的表单输入未按要求显示

javascript - 根据子类/内容更改 DIV 的颜色

javascript - 选择并显示为表行创建的每个新 "select option"中的值

javascript - 单击添加按钮我只需要八个房间

javascript - jquery - 禁用所有选择框?

javascript - 如何顺序播放多个音频文件

javascript - 如何捕获私有(private)变量

javascript - 在 xbl/xul 文件中加载 javascript 模块的正确方法是什么?