JS for循環暫停與定時器
- 第一種寫法
- 第二種寫法
- 第三種寫法
第一種寫法
使用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);
第二種寫法
使用 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);