【前端面试】Promise面试题总结

Promise 是异步编程的一种解决方案

promise实例的三个状态

pending(进行中)
resolved(已完成)
rejected(已拒绝)

特点:

将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。流程更加清晰,代码更加优雅
Promise对象提供统一的接口,使控制异步操作更加容易

缺点

无法取消Promise,一旦新建它就会立即执行,无法中途取消
如果不设置回调函数,Promise内部抛出的错误,不会反应到外部
当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成);结果变成了某种状态后,不再更改

宏任务与微任务(都为异步任务)

宏任务:包括整体代码script(可以理解为外层同步代码)、settimeout、setInterval、i/o、ui render
微任务:promise、object.observe、MutationObserver(监听DOM树的变化)

执行顺序

先执行同步代码,遇到异步宏任务则将异步宏任务放入宏任务队列中,遇到异步微任务则将异步微任务放入微任务队列中,当所有同步代码执行完毕后,再将异步微任务从队列中调入主线程执行,微任务执行完毕后再将异步宏任务从队列中调入主线程执行,一直循环直至所有任务执行完毕(事件循环EventLoop)
	总结:放入队列时宏任务优先,将队列中的代码拿到执行栈中执行微任务优先
await后面的语句相当于放到了new Promise中,下一行及之后的语句相当于放在Promise.then中

Promise的all和race和any

.all():接收一组异步任务,然后并行执行异步任务,在所有异步操作执行完后才执行回调。
	Promise.all()的状态变化与所有传入Promise实例对象状态有关,所有的状态都变成resolved,最终的状态才会变成resolved,只要有一个变成rejected,最终的状态就变成rejected
.race():接收一组异步任务,然后并行执行异步任务,只取第一个执行完成的异步操作的结果,其他的方法仍在执行,不过执行结果会被抛弃。
	取决于第一个完成的Promise对象,如果第一个完成的成功了,那么最终的就成功,否则最终失败
.any():参数中的Promise都失败最终才会失败;
参数中只要有一个为成功状态,那么最终就是成功;返回是第一个成功的值,后面就不管了;
实际应用:一次性加载多张图片时,哪一张先加载出来就显示哪一张,此时就可以使用Promise.any()方法。

Then方法中return的作用

then方法执行后返回一个新的Promise对象。输出then方法,返回的promise对象的状态改变,是pending状态。在then的回调函数中,return 后面的东西,会用promise包装一下。如果不加return默认返回的永远是resolve的成功状态;加上return后,下一个then就会根据上一个return返回的promise状态来进行。

promise重点是:输出流程题

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值