Promise解决了什么问题?
Promise解决的是异步编码风格的问题,而非其他问题
产生回调地狱的原因是什么?
-
嵌套调用,下面的任务依赖上个任务的请求结果,并在上个任务的回调函数内部执行新的业务逻辑,当嵌套层次多了之后,代码的可读性就变得很差。
-
任务的不确定性,执行每个任务都有两种可能的结果(成功或者失败),所以体现在代码中就需要对每个任务的执行结果做两次判断,这种对每个任务都要进行一次额外的错误处理方式明显增加代码的混乱程度。
Promise如何解决回调地狱?
- 消灭嵌套调用
- Promise实现了回调函数的延时绑定
- 将回调函数onResolve的返回值穿透到最外层
- 合并多个任务的错误处理
Promise如何处理异常?
是因为 Promise 对象的错误具有“冒泡”性质,会一直向后传递,直到被 onReject 函数处理或catch 语句捕获为止。具备了这样“冒泡”的特性后,就不需要在每个 Promise 对象中单独捕获异常了,而是将所有 Promise 对象的错误合并到一个函数来处理,这样就解决了每个任务都需要单独处理异常的问题。
Promise中为什么要引入微任务?
通过微任务可以让Promise中的onResolve延时被调用,还提升了代码的执行效率。
Promise中是如何实现回调函数返回值穿透的?
每次调用then的时候,都重新创建一个promise对象,并把上一个then的返回结果传给新的promise的then方法
then的链式调用和值穿透性
then的链式调用:使用 Promise 的时候,当 then 函数中 return 了一个值,不管是什么值,我们都能在下一个 then 中获取到。
值穿透性:当我们不在then中放入参数,例promise.then().then()
,那么其后面的then依旧可以得到之前then返回的值。