如何在满足特定条件时使循环暂停?在下面循环的例子只是说明所有值一次,而我希望它停止它跨越特定值获得的任何时间(例如,2):JS:用于暂停的循环
a = [1,1,1,2,1,1,1,3,4,2,1]
for (var i = 0; i < a.length; i++) {
if(a[i] == 2){
setTimeout(console.log(a[i]), 1000)
}else{
console.log(a[i]);
}
};
如何在满足特定条件时使循环暂停?在下面循环的例子只是说明所有值一次,而我希望它停止它跨越特定值获得的任何时间(例如,2):JS:用于暂停的循环
a = [1,1,1,2,1,1,1,3,4,2,1]
for (var i = 0; i < a.length; i++) {
if(a[i] == 2){
setTimeout(console.log(a[i]), 1000)
}else{
console.log(a[i]);
}
};
正如其他人说,在JavaScript中没有pause
。下面是一个异步循环的例子。
(function() {
var a = [1,1,1,2,1,1,1,3,4,2,1];
var i = 0;
var length = a.length;
function iteration() {
if (i == length) return;
console.log(a[i]);
if(a[i] == 2){
setTimeout(iteration, 1000);
}else{
setTimeout(iteration, 0);
}
i++;
};
iteration();
}());
你不能做到这一点直接,但你可以按照如下(你可以在这里进行测试代码:http://jsfiddle.net/xSu5J/):效仿
function myLoop(a) {
function showElem(index) {
if (index < a.length) {
var nextWaitTime = (a[index] == 2) ? 1000 : 1; //1000: long period, 1: short period
console.log(a[index]);
setTimeout(function(){showElem(index+1)}, nextWaitTime);
}
}
showElem(0);
}
myLoop([1,1,1,2,1,1,1,3,4,2,1]);
我真的不知道为什么要acheive这一点,但如果你想达致这,你需要调用自身的函数:
function myLoop(index){
index = index || 0;
a = [1,1,1,2,1,1,1,3,4,2,1]
for (var i = index; i < a.length; i++) {
if(a[i] == 2){
setTimeout(function(){
console.log(a[i]);
myLoop(++i)
}, 1000)
break;
}else{
console.log(a[i]);
}
};
}
myLoop()
为什么downvote? –
小提琴:http://jsfiddle.net/Uqr49/
var a = [1, 1, 2, 3, 1, 1, 2, 3];
function pauseOnTwo(arr) {
if (arr.length > 1) {
var slice = arr.shift();
if (slice === 2) {
setTimeout(function() {
console.log('found a two! ' + slice);
pauseOnTwo(arr);
}, 1000);
} else {
console.log('its not 2: ', slice);
pauseOnTwo(arr);
}
} else {
if (arr[0] === 2) {
setTimeout(function() {
console.log('found a two! ' + slice);
});
}
}
}
pauseOnTwo(a);
的下面创建一个函数,它接受3个参数,数组的时间暂停(以毫秒为单位)的量,以及如何暂停上。在函数内部,它将创建一个私有函数,用于遍历数组。如果pauseOn值encoutered一个的setTimeout用于调用指定的pauseTime
var arr = [1,1,1,2,1,1,1,3,4,2,1];
function iterateArray(arr,pauseTime,pauseOn){
var currentIndex=0;
function loop(){
for(i=currentIndex;i<arr.length; i++){
console.log(arr[i]);
if(arr[i]==pauseOn){
currentIndex = i+1;
setTimeout(loop,pauseTime);
return;
}
}
}
loop();
}
iterateArray(arr,3000,2);
的JavaScript后的循环功能已经没有'pause'功能,您将需要重构你的代码使用像setTimeout和设置变量标志时暂停以及何时继续等。 –
在重构过程中,您可能希望将'i'的范围设置为_function_的上方,以便在多个调用中共享它。 –
触发'调试器;'?你想通过暂停实现什么?不同的目标需要不同的方法。 – voithos