如何在每个 FOR 循环步骤后执行 运行 函数
How to run function after each FOR loop step
我需要将对象从数组 pts
一个一个地传输到数组 test
,每次之后我都需要用数组 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 );
但每次传输后我都无法 运行 运行...
我的控制台看起来像这样:
和:
我很困惑...我哪里错了?为什么我不能得到这样的测试:
after 1. loop array[1] -> run function with this array
after 2nd loop array[2] -> run function ...
etc....
已编辑
试试这个:
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 秒执行一次该函数,这就是解决方案。
它被称为 "Rucursion" 此函数将调用自身,直到 m 大于数组的长度 (if(m < pts.length)
)。
如果这不是你想要的,请向我解释更多细节。
希望对您有所帮助:)
我认为您添加 setTimeout
或 setInterval
方法会使事情复杂化。你不能简单地 运行 循环中的 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);
}
如果 setTimeout
或 setInterval
调用有充分的理由,请解释为什么需要这些调用。
我需要将对象从数组 pts
一个一个地传输到数组 test
,每次之后我都需要用数组 test
我什么都试了:
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 );
但每次传输后我都无法 运行 运行...
我的控制台看起来像这样:
和:
我很困惑...我哪里错了?为什么我不能得到这样的测试:
after 1. loop array[1] -> run function with this array
after 2nd loop array[2] -> run function ...
etc....
已编辑
试试这个:
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 秒执行一次该函数,这就是解决方案。
它被称为 "Rucursion" 此函数将调用自身,直到 m 大于数组的长度 (if(m < pts.length)
)。
如果这不是你想要的,请向我解释更多细节。
希望对您有所帮助:)
我认为您添加 setTimeout
或 setInterval
方法会使事情复杂化。你不能简单地 运行 循环中的 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);
}
如果 setTimeout
或 setInterval
调用有充分的理由,请解释为什么需要这些调用。