1
今天面试被问到了两个关于promise的面试题,不外乎就是执行顺序相关的问题,话不多说,先上代码!
这道题相信大家都明白了,一道烂大街的题,输出结果不外乎就是Promise1,1,Promise2,setTimeout
大致说一下原理,首先先了解一句话:同步优先,异步靠边
,setTimeout是常用来模仿异步处理的一个方式,当你看到setTimeout的话那就肯定是异步操作,先让他往后稍一稍,接下来就是promise,promise内部是同步的,所以说先打印出Promise1
,接下来就是then方法里的console,因为then是异步的,所以也先往后稍一稍,再往下就是最外部的console.log(1)了,这肯定是同步的,所以接下来打印的是1
,然后就是这个setTimeout和then里面的先后顺序了,then函数在promise是下一轮执行的,所以接下来打印的就是Promise2
,最后输出的是setTimeout
。
2
第二道题,我问了很多人,都答得和我一样,都答错了,不知道你们有没有中招。话不多说,上代码。
一开始我想到的就是1,2,3,4
,面试官也没说什么,就继续接下来的问题了,其实我知道肯定答错了,所以回来看了一下文档,正确结果是1,2,4,3
,原因很简单,当Promise直接resolve的时候,表示着在当前这一轮执行,这里就可以看作成一个同步的事件,所以打印的就是1,2,4,3。