关于promise的面试题

今天面试被问到了两个关于promise的面试题,不外乎就是执行顺序相关的问题,话不多说,先上代码!


这道题相信大家都明白了,一道烂大街的题,输出结果不外乎就是Promise1,1,Promise2,setTimeout
大致说一下原理,首先先了解一句话:同步优先,异步靠边,setTimeout是常用来模仿异步处理的一个方式,当你看到setTimeout的话那就肯定是异步操作,先让他往后稍一稍,接下来就是promise,promise内部是同步的,所以说先打印出Promise1,接下来就是then方法里的console,因为then是异步的,所以也先往后稍一稍,再往下就是最外部的console.log(1)了,这肯定是同步的,所以接下来打印的是1,然后就是这个setTimeout和then里面的先后顺序了,then函数在promise是下一轮执行的,所以接下来打印的就是Promise2,最后输出的是setTimeout。
复制代码

第二道题,我问了很多人,都答得和我一样,都答错了,不知道你们有没有中招。话不多说,上代码。


一开始我想到的就是1,2,3,4,面试官也没说什么,就继续接下来的问题了,其实我知道肯定答错了,所以回来看了一下文档,正确结果是1,2,4,3,原因很简单,当Promise直接resolve的时候,表示着在当前这一轮执行,这里就可以看作成一个同步的事件,所以打印的就是1,2,4,3。
复制代码

说说你对promise对象的理解:

  1. promise是异步编程的一种解决方法,从语法上说promise是一个对象,从它可以获取异步操作的消息

  2. promise主要作用是:可以把异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,promise对象提供了统一的接口,使得控制异步操作更简单

  3. promise对象的特点:

    对象状态不受外界影响(公3种pending(进行中),resolved(已完成),reject(已失败))。 只有异步操作的结果可以决定是当前哪一种状态,任何其他操作都无法改变 一旦状态改变就不会再变,任何时候都可以得到这个结果。 promise对象改变只有两种可能:从pending到resolved,从pending到reject

  4. promise对象的缺点:

    无法取消promise,一旦创建就立即执行,无法中途取消 如果不设置回调函数,promise内部抛出错误,不会反映到外部 当处于pending状态时,无法得知目前进展到那个阶段(刚刚开始还是即将完成)

转载于:https://juejin.im/post/5d413eb56fb9a06ad546fad9

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值