如何在每个FOR循环步骤后运行函数

时间:2015-01-25 22:38:35

标签: javascript jquery arrays for-loop settimeout

我需要逐个将对象从数组pts传递到数组test,之后我需要使用数组测试调用函数mimicSvg

我尝试了一切:

var test=[{"X":"300","Y":"400"}];
setTimeout(function () {
    for(var m=1;m<25;m++){
    var q = pts[m].X;
    var e = pts[m].Y;
    console.log(test);
    test.push({"X":q,"Y":e});
    mimicSvg(test,1);

    }
    }, 1000);

和此:

var test=[{"X":"300","Y":"400"}];
for(var m=1;m<pts.length;m++){

    var q = pts[m].X;
    var e = pts[m].Y;
    console.log(test);
    test.push({"X":q,"Y":e});
    alert(m);
  setInterval(mimicSvg, 2000, test, 1);

  }

还有这个:

setTimeout( "mimicSvg(test,1);test.push({"X":q,"Y":e});",m*3000 );

和此类似:

setTimeout(function() {mimicSvg(test,1); test.push({"X":q,"Y":e});},m*3000 );

但每次转移后我都无法运行功能...... 我的控制台看起来像这样: enter image description here

和:enter image description here

我很困惑......我错了吗?为什么我不能这样测试:

after 1. loop array[1] -> run function with this array
after 2nd loop array[2] -> run function ...
etc....

2 个答案:

答案 0 :(得分:2)

<强> EDITED 试试这个:

var set_time;
var m = 0;
var add_array = function(){
    if(m < pts.length){
       var q = pts[m].X;
       var e = pts[m].Y;
       console.log(test);
       test.push({"X":q,"Y":e});
       mimicSvg(test,1);
       m++;
       set_time = setTimeout(add_array,1000);//it call itself again and again until m is more than the length of the array'
    }
}
set_time = setTimeout(add_array,1000);

我认为您的问题是for立即运行所有数组的函数。我想你想每1秒运行一次这个功能,以便解决问题 它被称为&#34; Rucursion&#34;此函数将调用自身,直到m大于数组的长度(if(m < pts.length)) 如果它不是您想要的,请向我解释更多细节 希望它有所帮助:)

答案 1 :(得分:1)

我认为您通过添加setTimeoutsetInterval方法使事情变得复杂。你能不能简单地在循环中运行mimicSvg调用?假设是对的,这是我的解决方案:

  /** assuming pts and mimicSvg is available in this scope */

  var testData = [{x: 300, y:400}];

  for(var m=1;m<pts.length;m++){
    var pt = pts[m];
    var itemForTest = {X: pt.X, Y: pt.Y}

    console.log("Test Data at iteration " + m, testData);

    testData.push(itemForTest);

    mimicSvg(testData, m);

  }

如果setTimeoutsetInterval来电有充分理由,请解释为什么需要这些电话。