JS:promise笔试题

笔试题:

            setTimeout(() => {
                console.log(0);
            });
            new Promise(resolve => {
                console.log(1);
                setTimeout(() => {
                    resolve();
                    var p1=new Promise((n1,n2)=>{n1(20)})
                    p1.then(() => console.log(2));
                    console.log(3);
                    setTimeout(()=>{console.log(9)},0)
                });
                new Promise((n1,n2)=>{n1(20)}).then(() => console.log(4));
            }).then(() => {
                console.log(5);
                var p2=new Promise((n1,n2)=>{n1(20)})
                p2.then(() => console.log(8));
                setTimeout(() => console.log(6));
            });
            console.log(7);

打印:

1  7  4  0  3  5  2  8  9  6

解析:

首先将第一个宏任务加入等待队列,在promise对象中,先打印同步任务-->1,然后发现有一个宏任务将其加入等待列表,下一个是promise对象,将其中的微任务加入队列,先将同步任务全部打印-->7,再打印刚刚等待的微任务-->4,此时执行第一个等待的宏任务,打印-->0,第二个等待的宏任务中先打印-->3,再将其宏任务和微任务加入等待队列,继续执行下一个队列中的微任务,打印-->5,将宏任务和微任务加入等待队列,回到第二个宏任务中等待的微任务,打印-->2,进入下一个微任务中,打印等待的微任务-->8,又回到上面第二个宏任务中的宏任务中打印-->9,最后执行最后一个微任务中的最后一个宏任务,打印-->6。

 

面试问答:

posted on 2022-07-14 17:14  香香鲲  阅读(174)  评论(0编辑  收藏  举报