天天看点

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

继续阅读