Javascript JS:for带暂停的循环

Javascript JS:for带暂停的循环,javascript,for-loop,conditional,Javascript,For Loop,Conditional,当满足某个条件时,如何使循环暂停?在下面的示例中,循环仅一次显示所有值,而我希望它在遇到特定值时停止,例如2: 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]); } }; 正如其他人所说,JavaScr

当满足某个条件时,如何使循环暂停?在下面的示例中,循环仅一次显示所有值,而我希望它在遇到特定值时停止,例如2:

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中没有停顿。下面是一个异步循环的示例

(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();
}());

您不能直接执行此操作,但可以按如下方式进行模拟您可以在此处测试代码:


我真的不知道你为什么想要实现这个,但是如果你想要实现这个,你需要一个调用自身的函数:

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


下面创建的函数包含3个参数、一个数组、以毫秒为单位的暂停时间和暂停内容。在函数内部,它将创建一个私有函数,用于在数组上循环。如果遇到pauseOn值,则使用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没有暂停功能,您需要重构代码以使用setTimeout和setup变量来标记何时暂停和何时继续等。在重构过程中,您可能希望在函数上方设置i的范围,以便在多个invocationsTrigger调试器之间共享;?你想通过暂停来实现什么?不同的目标需要不同的方法。setTimeout的参数是要调用的函数或要计算的字符串。将console.log放在那里会立即调用它,而不是在超时之后。这里有一个选项,可以更自定义何时暂停以及暂停多少:
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);
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);