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

Promise面试题是一种常见的面试题目,用来考察对Promise的理解和使用能力。这些题目通常涉及Promise的基本概念、方法和常见问题的解决方案。在这些题目中,需要通过编写代码片段或解答问题来展示对Promise的运用和理解。 引用中提到了一篇关于控制并发的Promise面试题的解析文章,该文章介绍了不同的解决方案。引用中给出了一些关于Promise的面试挑战题,包括10个代码片段,可以用来测试对Promise的理解和应用能力。如果你对这些题目感兴趣,可以阅读引用和的内容,了解更多细节。 总的来说,Promise面试题是一种常见的考察前端开发者对Promise的掌握程度的方式,通过解答这些题目可以展示自己对Promise的理解和使用能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【JavaScript源代码】Promise面试题详解之控制并发.docx](https://download.csdn.net/download/mmoo_python/72108747)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [10 个 JavaScript Promise面试题](https://blog.csdn.net/snsHL9db69ccu1aIKl9r/article/details/125454133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值