如何在滿足特定條件時使循環暫停?在下面循環的例子只是說明所有值一次,而我希望它停止它跨越特定值獲得的任何時間(例如,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