来玩两把?

91 阅读1分钟

试试写一下打印顺序呢

async function awaitFoo(word) {
    console.log("def await function " + word);
    Promise.resolve().then(() => {
        console.log("run await function" + word)
    })
}

async function asyncFoo(word) {
    console.log(word + " async function start")
    idle(1000);
    await awaitFoo(word)
    console.log(word + " async function end")
}

function idle(time) {
    const d = new Date();
    while (+new Date() - d < time) ;
    console.log("等待了" + time / 1000 + "秒")
}

;(function () {

    console.log("start")

    asyncFoo("A")

    // 主线程代码扫完之后添加的第一个宏
    setTimeout(() => {
        console.log("timeout 0")
    }, 1000)

    const p = new Promise(resolve => {
        console.log("promise def");
        resolve();
    })

    // 主线程代码扫完之后添加的第一个job
    p.then(() => {
        console.log("promise 0 then");
        setTimeout(() => {
            console.log("timeout in promise");
        });
        idle(1000)
        Promise.resolve().then(() => {
            console.log("promise in promise")
        })
    })

    // 主线程代码扫完之后添加的第二个job
    Promise.resolve().then(() => {
        console.log("promise 1 then")
    })

    // 主线程代码扫完之后添加的第二个宏
    setTimeout(() => {
        console.log("timeout 1");
    }, 600)

    console.log("end")
})();

评论里交流~