【发布时间】:2020-06-05 17:01:54
【问题描述】:
我正在尝试在 React 中创建一个排序算法可视化工具。 此函数正在运行,但我想减慢 for 循环的速度,以便每 400 毫秒设置一次状态。
bubbleSort = (arr) => {
console.log('bubblesort is running');
var len = arr.length;
console.log('array length: ', len);
console.log(arr);
for (var i = len-1; i>=0; i--){
console.log("i: ", i);
for(var j = 1; j<=i; j++){
console.log("j: ", j);
if(arr[j-1]>arr[j]){
var temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
console.log("current array: ", arr);
this.setState({
array: arr
})
}
}
}
console.log("final array: ", arr)
return arr
}
【问题讨论】:
-
你不能,除非完全重写代码。 JavaScript(实际上)是单线程的,因此您必须将代码分成更小的单元,以便控制事件循环和其他可能想要显示该状态的代码。
-
这能回答你的问题吗? Sleep in JavaScript - delay between actions
-
@Alnitak 现在可以了。
async/await允许您在不重写的情况下执行此操作。现在写答案... -
@Amadan 我希望这非常接近于完全重写,特别是因为在 OPs 代码中没有你可以
await的函数调用。 -
您可以在标准的
for循环中使用await,这将“错开”循环的迭代。
标签: javascript reactjs for-loop bubble-sort