如何在 java 脚本中添加延迟?

How do I add a delay in java script?

我正在尝试创建一个用于对整数数组进行排序的可视化工具。我需要在排序的每次迭代后绘制表示并添加延迟,这样它就不会立即发生并且只显示排序后的数组。但是,setTimeout 似乎不起作用,它只是显示排序数组的表示,而不是在每次迭代之后显示。代码在 java 脚本中。

function sort(){
  var len = arr.length;
   for (var i = len-1; i>=0; i--){
    for(var j = 1; j<=i; j++){
       if(arr[j-1]>arr[j]){
           var temp = arr[j-1];
           arr[j-1] = arr[j];
           arr[j] = temp;
           setTimeout(startDraw, 3000);
        }
     }
   }
}

你需要明白你在这里做什么。如果您按照您正在执行的方式调用 setTimeout,那将无法达到目的,因为初始循环仍然会在不等待您的 setTimeout 的情况下完成。所以,你必须: 1. 打破循环 2. 在打破之前调用你的绘制函数

var arr = [5,4,4,6,7,7,21,45,5,7,87,1,3,5,65];

function sort(){
  var len = arr.length;
  loop1:
   for (var i = len-1; i>=0; i--){
   loop2:
    for(var j = 1; j<=i; j++){
       if(arr[j-1]>arr[j]){
           var temp = arr[j-1];
           arr[j-1] = arr[j];
           arr[j] = temp;
           console.log(arr);
           setTimeout(sort, 1000);
           break loop1;
        }
     }
   }
}

sort();

尝试使用 let 而不是 var

function sort(){
   let len = arr.length;
    for (let i = len-1; i>=0; i--){
       for(let j = 1; j<=i; j++){
          if(arr[j-1]>arr[j]){
            let temp = arr[j-1];
            arr[j-1] = arr[j];
            arr[j] = temp;
            setTimeout(startDraw, 3000);
       }
    }
  }
}