一、基础的问题

1、什么是Promise?

​ promise可以处理异步操作,具有链式调用和状态管理,两者结合可以避免回调地狱,使得流程更加的清晰。

2、Promise的状态有哪些?

​ promise有三种状态:pending、Fulfilled、Rejected
pending状态是promise中的.then方法返回了一个新的promise的对象,此时这个新的promise对象的状态就是pending(进行中),等待结果的状态,但是这个promise的对象接下来的状态的改变要看前一个.then里面的回调返回的结果。
Fulfilled状态是前一个.then里面的回调Resolve返回结果之后,promise对象从pending状态转换为Fulfilled

​ Rejected状态是前一个.then里面的回调Reject返回结果之后,promise对象从pending状态转换为Rejected

3、如何创建一个Promise?

​ 直接使用promise的构造函数来创建promise对象,promise个构造函数中具有两个参数,resolve和reject,这两个参数是用来改变promise状态的,操作成功,就调用resolve函数,使其状态从pending转变为Fulfilled。操作失败,就调用reject函数,使其状态从pending转变为Rejected

4、Promise的链式调用是什么?

​ promise内部组成是由多个.then方法和一个.catch方法组成,所有的then方法都会同时返回一个全新的promise的对象,此时这些promise对象的状态是pending,每个then方法返回的promise对象状态的改变都要先等前一个then方法的返回结果来决定,依次下去,形成链式调用

5、如何处理多个Promise的并行执行?

​ 并行操作就是把好几个promise同时放入一些方法中,promise提供了Promise.all和Promise.race两个方法来执行,其中Promise.all方法是要等所有promise执行完成并且返回成功的结果才会调用,Promise.race方法只要里面并行执行的promise有一个返回成功的结果就会被调用。

6、Promise和回调函数有什么不同?

​ promise是一个状态管理,但是这些状态的改变取决于其内部的回调函数。所以promise和单纯的回调函数还是有很大的区别的。

7、如何处理Promise中的错误?

​ promise的调用过程中,如果发生了错误,会沿着promise链找最近的then方法内部的catch(),而不会走then()方法的try,这在promise中也叫作异常穿透,除此之外,还有一种直接处理错误的办法,就是直接中断promise链,直接将错误传到promise对象的.catch(),而不会沿着promise链走then方法里面的catch

8、Promise和 async / await 之间有什么关系?

​ 两者都是关键字,但是作用不同,async关键字是创建一个异步函数,在await是在里面使用的关键字,用来创建等待任务,就好比promise中的then一样

​ async/await是一种在Promise之上构建的更高级的异步编程方式,它使得异步代码更易于理解和编写,并提供更清晰的控制流。async函数可以包含await关键字,用于等待异步操作的结果。async/await不仅限于Promise,可以用于处理多种异步操作。

9、什么是Promise的错误处理机制?

​ promise里面的错误处理有两种,promise的catch和promise里面then方法的error。一般情况下发生错误的时候会沿着promise链找最近的then里面的error,如果没解决就会一直往下找,这也叫作异常穿透,还有一种情况是这个错误直接导致了promise链中断,那就不会沿着promise链往下找then方法里面的error,而是会将这个错误交给promise的catch去解决

10、 如何处理嵌套Promise?

​ 嵌套promise有两种常用的方法,第一种是在promise对象内部的then方法里面创建新的promise对象,实现嵌套promise。第二种是在async/await里面使用await关键字重新创建一个新的promise,也可以实现嵌套promise

二、高级的问题

1、Promise的实现原理是什么?

2、如何自己实现一个Promise?

3、如何处理Promise中的循环依赖(circular dependencies)?

4、什么是Promise的取消(cancellation)机制?

5、Promise中的异常处理和同步错误处理有何不同?/

6、如何实现一个带有超时(timeout)功能的Promise?

7、Promise中的.finally()方法有什么作用?

8、什么是Promise的错误处理机制?

9、如何处理Promise中的竞态条件(race condition)?

10、什么是Promise的全局状态管理?

三、深入的问题

1、什么是Promise链的终止条件?

2、什么是Promise的热(hot)和冷(cold)观察模式?

3、如何在Promise中处理复杂的同步和异步组合?

4、如何在Promise中实现进度(progress)通知?

5、如何处理Promise中的推测(swallowing)?

6、如何在Promise中实现自动重试和退避策略?

7、如何在Promise中实现缓存和记忆化?

8、如何使用Promise处理复杂的数据流操作?

9、如何在前端应用中使用Service Worker和Promise来提高离线支持?

10、什么是Promise的追踪(tracing)和性能优化?