2014-03-06 53 views
1

如何在满足特定条件时使循环暂停?在下面循环的例子只是说明所有值一次,而我希望它停止它跨越特定值获得的任何时间(例如,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]); 
    } 
}; 
+4

的JavaScript后的循环功能已经没有'pause'功能,您将需要重构你的代码使用像setTimeout和设置变量标志时暂停以及何时继续等。 –

+0

在重构过程中,您可能希望将'i'的范围设置为_function_的上方,以便在多个调用中共享它。 –

+0

触发'调试器;'?你想通过暂停实现什么?不同的目标需要不同的方法。 – voithos

回答

0

正如其他人说,在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(); 
}()); 
0

你不能做到这一点直接,但你可以按照如下(你可以在这里进行测试代码: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]); 
-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() 

http://jsfiddle.net/EUh3m/2/

+0

为什么downvote? –

0

小提琴: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); 
0

的下面创建一个函数,它接受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);