天天看點

JS for循環暫停與定時器第一種寫法第二種寫法第三種寫法

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);
           

繼續閱讀