js--输出及原因题目2

95 阅读1分钟
        async function async1() {
            console.log("async1 start");
            await async2();
            console.log("async1 end");
        } 
        async function async2() {
            console.log("async2");
        } 

        console.log("script start"); 

        setTimeout(() => {
            console.log("setTimeout");
        }, 0);

        async1(); 

        new Promise((resolve) => {
            console.log("promise1");
            resolve();
        }).then(() => {
            console.log("promise2");
        }); 
        
        console.log("script end");
        
        
        结果:script start
             async1 start
             async2
             promise1
             script end
             async1 end   注意这个的执行时机
             promise2
             setTimeout
             
        注意点:1setTimeout是宏任务,then方法是微任务
        2、函数执行时,内部遇到异步操作,await异步操作后面的也会进入微任务。
        3、同步代码执行完毕后,执行完微任务,再执行宏任务。
        4、扩展:执行微任务的时候,内部可能还有微任务和宏任务,宏任务弹出排队,微任务必须先于宏任务执行完毕。