2014-03-06 41 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);