博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个Promise面试题

阅读量:5942 次
发布时间:2019-06-19

本文共 1002 字,大约阅读时间需要 3 分钟。

原文地址: https://github.com/lzlu/Blog/issues/7

本文没有什么干货,只是提供了一个面试题的解答思路。

这个题目是之前面试的时候遇到的,当时没答对。虽然这种题目看起来对写代码并没什么实际意义,但说到底还是自己对JS执行机制不够深入了解。

就拿这题目拿出来分享给大家一些解题思路。 对JS执行机制不够了解的建议先看了这篇,再食用。

不多说了,上酸菜,哦不对,题目。

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((arg)=>{        console.log(arg);    });}));first().then((arg)=>{    console.log(arg);});console.log(4);复制代码

第一轮事件循环

先执行宏任务,主script ,new Promise立即执行,输出【3】,执行p这个new Promise 操作,输出【7】,发现setTimeout,将回调放入下一轮任务队列(Event Queue),p的then,姑且叫做then1,放入微任务队列,发现first的then,叫then2,放入微任务队列。执行console.log(4),输出【4】,宏任务执行结束。

再执行微任务,执行then1,输出【1】,执行then2,输出【2】。到此为止,第一轮事件循环结束。开始执行第二轮。

第二轮事件循环

先执行宏任务里面的,也就是setTimeout的回调,输出【5】。resovle不会生效,因为p这个Promise的状态一旦改变就不会在改变了。 所以最终的输出顺序是3、7、4、1、2、5。

总结

对JavaScript执行机制有了解,并且知道Promise构造函数是立即执行的,这个题目相信还是很简单的。

转载地址:http://hbhtx.baihongyu.com/

你可能感兴趣的文章
使用vim保存权限不够的文件
查看>>
nodejs如何利用rpc调用python
查看>>
kinect c++
查看>>
大数据,只是为了赚钱么?
查看>>
jvm系列(四):jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)
查看>>
IntelliJ IDEA上操作GitHub
查看>>
js时间日期友好显示
查看>>
java使用Calendar类获取常用简单工具类
查看>>
自定义listview
查看>>
C++中文转码问题(GB2312 -> UTF8)
查看>>
H3C ER5200配置***参考
查看>>
回到顶部按钮
查看>>
Python Numpy 从文件中读取数据
查看>>
Rubymine的启动问题
查看>>
Debian6 Squeeze上安装xen
查看>>
vue中的组件实现
查看>>
REPL (read-evaluate-print-loop)概念-读取评估打印循环
查看>>
jdk1.6连接sqlserver2005
查看>>
java发展史
查看>>
Java foreach与for循环性能对比
查看>>