JS优雅的实现Sleep休眠及应用在for多层嵌套中暂停执行

方法一:
先打印1,1.5秒之后打印2,下面完美代码就是参照这个实现的

/*
休眠函数sleep
调用 await sleep(1500)
 */
function sleep(ms) {
    return new Promise(resolve=>setTimeout(resolve, ms))
}
async function main() {
    console.log(1)
    await sleep(1500)
    console.log(2)
}
main()

方法二:链接地址

for(var i = 0; i < 3; i++) {
    (function(i) {
        setTimeout(function() {
            console.log(i);
        }, (i + 1) * 1000);
    })(i)
}

方法三

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

顺序执行

for (let i = 0; i < 10; i++) {
    setTimeout(() => {
        console.log(`这是外层${i}`);
    }, 1000);
    for (let j = 0; j < 5; j++) {
        setTimeout(() => {
            console.log(`这是内层的${j}`);
        }, 1000);
    }
}

完美嵌套多层for顺序找执行

function sleep(ms) {
    return new Promise(resolve=>setTimeout(resolve, ms));
}
async function main() {
    for (let i = 0; i < 5; i++) {
        for (let j = 0; j < 3; j++) {
            console.log(i,j);
            await sleep(1000);
        }
    }
}
main();

注意:这个完美代码必须在chrome的console面板(F12打开开发者工具可找到)运行才有效果,其他js在线运行工具效果不理想,耽误我许多工夫,以为编写代码有问题,实际上在线运行工具的问题。