Promise相关面试题

题1:

代码:

<script>
        setTimeout(function (){
    
    
            console.log(1);
        },0)
        Promise.resolve().then(v  => {
    
    
            console.log(2); 
        })
        Promise.resolve().then(v  => {
    
    
            console.log(3);
        })
        console.log(4);
    </script>   

结果:

在这里插入图片描述

分析:

  1. 先执行初始化代码,promise代码放入微队列,定时器代码放入宏队列,再输出 4
  2. 微队列优先执行,按顺序输出 2 和 3
  3. 最后执行宏队列,输出 1

题2:

代码:

<script>
        setTimeout(function (){
    
    
            console.log(1);
        },0)
        new Promise((resolve) => {
    
    
            console.log(2);
            resolve()
        })
        .then( v => {
    
    
            console.log(3);
        })
        .then( v => {
    
    
            console.log(4);
        })
        console.log(5);
    </script>   

结果:

在这里插入图片描述

分析:

在这里插入图片描述

  1. 先进入new Promise(xx)执行代码,输出 2 resolve() 改变状态
  2. 往下执行 .then() => .then() => 输出5
  3. 再执行.then()的异步回调函数 => 输出3 输出4
  4. 最后执行定时器的异步回调函数 => 输出1

题3:

代码:

script>
       const first = () =>(new Promise((resolve,reject) =>  {
    
    
           console.log(3);
           let p = new Promise((resolve,reject) => {
    
    
               console.log(7);
               setTimeout(() => {
    
    
                  console.log(5);
                   resolve(6)
               }, 0);
               resolve(1)
           })
           resolve(2)
           p.then( v => {
    
    
               console.log(v);      
           })
        }))
        first().then( v => {
    
    
            console.log(v);
        })
        console.log(4);
    </script>   

结果:

在这里插入图片描述

分析:

  1. 同步代码先执行
  2. 再执行异步代码,微队列优先与宏队列
  3. 没有打印6 是因为已经改变过p的状态了

题4:

代码:

<script>
         setTimeout(() => {
    
    
            console.log(0)
        }, 0)
        new Promise((resolve,reject) =>  {
    
    
            console.log(1);
            resolve()
        })
        .then(() => {
    
    
            console.log(2);
            new Promise((resolve,reject) => {
    
    
                console.log(3);
                resolve()
            })
            .then(() => {
    
    
                console.log(4);
            })
            .then(() => {
    
    
                console.log(5);
            })
        })
        .then(() => {
    
    
            console.log(6);
        })
        new Promise((resolve,reject) => {
    
    
            console.log(7);
            resolve()
        })
        .then(() => {
    
    
            console.log(8);
        })
    </script>   

结果:

在这里插入图片描述

题5:手写/自定义promise

自定义promise

猜你喜欢

转载自blog.csdn.net/yrfjygb/article/details/114114551