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。
面试问答: