第一种写法: 异步实现,可用于for循环
感谢 https://blog.csdn.net/qq_38251691/article/details/103303581
使用async 将异步方法变为同步方法执行,只有返回 resolve才会触发 await向下执行。可以实现for循环的暂停
const sleep = (timeout= 1000)=>new Promise((resolve, reject)=>{
setTimeout(resolve, timeout);
});
// 可以使用 bluebird模块中的 bluebird.delay() 替换 sleep()
// const bluebird = ruquire('bluebird');
let timer = async(timeout) => {
for(let i = 0; i< timeout; i++) {
await sleep(1000);
console.log(i+1);
}
}
timer(10);
变体
const sleep = (timeout= 1000)=>new Promise((resolve, reject)=>{
setTimeout(resolve, timeout);
});
var cate1s=document.getElementsByClassName('cate')
let timer_click = async(time) => {
for(let i=0; i<cate1s.length; i++){
cate1s[i].click()
await sleep(time)
}
}
timer_click(1000)
第二种写法使用 setInterval()方法实现
function timer(timeout){
let i = 0;
let t;
t = setInterval(time, 1000);
function time() {
console.log(i);
i++;
if(i >= timeout) clearInterval(t);
}
}
timer(10);
第三种写法:使用 setTimeout 实现
function timer(timeout) {
let i = 0;
// let t;
time();
function time() {
if (i < timeout) {
console.log(i);
i++;
setTimeout(time, 1000);
} else {
return;
}
}
}
timer(10);