在循环内控制,多长时间执行一次循环体,js没有提供这种方法,就只能自己写个判断时间的函数
第一种方法:es6之前我们可以用时间戳来判断
function sleep(n){
var start=new Date().getTime();//定义起始时间的毫秒数
while(true){
var time=new Date().getTime();//每次执行循环取得一次当前时间的毫秒数
if(time-start>n){//如果当前时间的毫秒数减去起始时间的毫秒数大于给定的毫秒数,即结束循环
break;
}
}
}
function test(n){//用这个函数测试吧
for(var i=0;i<3;i++){
alert(i);
sleep(3000);//每隔3000毫秒执行一次for循环
}
}
第二种方法:有了es6,我们就可以借助promise来实现
// 我们可以把这个方法放到公共的js文件中(utils.js或common.js)
export async function sleep(time) {
return new Promise((resolve) => {
setInterval(() => {
resolve();
}, time);
});
}
// 页面调用时 先引入进来
import { sleep } from '../common/utils'
// 具体使用时,直接方法名调用,下面是我简化删除了其他功能代码的一段小例子,仅供参考,下例是一个冒泡排序,交换两个值时每隔200毫秒交换一次,不让for循环立即执行
async startSort() {
const { array } = this;
for (let i = 0; i < array.length - 1; i++) {
for (let j = 0; j < array.length - 1 - i; j++) {
/* 等待0.2s */
await sleep(200);
if (array[j] <= array[j + 1]) {
let temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}