Promise 的工作流程如下:
- 创建一个 Promise 对象,通过
new Promise()
构造函数来实例化。 - 在构造函数中传入一个执行器函数(executor function),该函数接收两个参数:
resolve
和reject
。 - 异步操作开始执行。执行器函数中的逻辑会被立即执行,可以进行一些异步操作(如网络请求、读取文件等)。
- 根据异步操作的结果,调用
resolve
或reject
函数来改变 Promise 的状态。- 如果操作成功完成,调用
resolve()
,将 Promise 的状态改为 Fulfilled(已成功)。 - 如果操作失败或发生错误,调用
reject()
,将 Promise 的状态改为 Rejected(已失败)。
- 如果操作成功完成,调用
resolve
或reject
函数被调用时,Promise 的状态被固定,不可再改变。.then()
方法可以被调用来注册 Promise 的成功处理函数。它接收一个回调函数,并在 Promise 的状态变为 Fulfilled 时执行。.catch()
方法可以被调用来注册 Promise 的失败处理函数。它接收一个回调函数,并在 Promise 的状态变为 Rejected 时执行。.finally()
方法可以被调用来注册一个在成功或失败后都会被执行的回调函数。- 如果需要,可以使用
.then()
方法返回另一个 Promise 对象,实现 Promise 的链式调用(Chaining)。 - Promise 链式调用中的每个
.then()
方法都可以返回一个新的值或 Promise 对象,供下一个.then()
方法使用。 - 如果遇到异常,Promise 会将异常传递给最近的
.catch()
方法处理,如果没有.catch()
方法,异常将被静默地忽略。
通过使用 Promise,可以更好地处理异步操作的成功和失败情况,并使得异步代码的控制流程更加清晰和可读。同时,Promise 还提供了一种优雅的方式来解决回调地狱(Callback Hell)问题,使异步代码更易于组织、维护和扩展。