promise的队列,宏任务,微任务,同步任务

    // promise里面有一个特别的任务,就是微任务
        // 同步任务>微任务>宏任务
        setTimeout(() => {
            console.log("setTimeout");
        }, 0);   //代表的是宏任务
        new Promise(resove=>{
            console.log("promise"); //是同步任务
            resove()
        },reject=>{

        }).then(()=>{ //then相当等待,里面的结果必须等待上面resove()了才可以执行
            console.log("成功了");  //代表的是微任务
        })
        console.log("hello");
          

这里面输出的结果是:

 

 

 

        new Promise(resove => {
            setTimeout(() => {
                // console.log("setTimeout"); //宏任务
                resove()
                console.log("setTimeout");

            }, 0);
            console.log("promise"); //同步任务
        }).then(() => { 
            //待上面resove()了,才可以执行里面的代码
            console.log("成功了"); //微任务
        })
        console.log("hello"); //同步任务
/* 
不管什么任务,一旦放入了主线程中执行,必须等主线程里的任务执行完,才可以执行下一个放入主线程的任务
所以 代码执行时,一开始先到定时器,定时器是异步的并且是宏任务,先放入内存中,不执行。
再往下走,经过了第一个同步任务promise,放入主线程中执行,再走,发现then,不执行,
继续往下,第二个同步任务(hello)执行,
现在同步走完,开始执行异步的任务,进到定时器里,说明这里将定时器放入主线程了,不管console.log("setTimeout"); 放在resove()的上面还是下面,都会先输出setTimeout,因为要先将定时器先处理完,
所以最后再输出 '成功了' . 所以这个例子也告诉我们,同步任务>微任务>宏任务 并不是绝对的
*/

 

 

posted @ 2021-02-18 16:40  江上雪  阅读(120)  评论(0编辑  收藏  举报