一步一步手写 Promise
内容提要
本文讲解如何根据 Promises/A+ 规范手写实现一个 Promise 类。Promise 代表异步操作结果,有 pending、fulfilled、rejected 三种状态。实现中定义了 MyPromise 类,包含状态、值、拒因及回调方法。then 方法用于注册回调并返回新 Promise,resolvePromise 方法处理 thenable 对象。通过 Promises/A+ 测试验证正确性,并优化类型判断以符合规范。
关键要点
-
本文讲解如何根据 Promises/A+ 规范手写实现一个 Promise 类。
-
Promise 代表异步操作结果,有 pending、fulfilled、rejected 三种状态。
-
实现中定义了 MyPromise 类,包含状态、值、拒因及回调方法。
-
then 方法用于注册回调并返回新 Promise,resolvePromise 方法处理 thenable 对象。
-
Promises/A+ 规范要求 promise 必须处于三种状态之一,且状态不可改变。
-
构造函数中传入回调方法,负责将 promise 置为 fulfilled 或 rejected 状态。
-
实现 fulfillPromise 和 rejectPromise 方法以修改 promise 状态。
-
then 方法接收两个可选参数,分别为 onFulfilled 和 onRejected。
-
then 方法可以被多次调用,且返回的新 promise 的值或拒因与当前 promise 相同。
-
resolvePromise 方法用于根据回调方法的返回值决议一个 promise。
-
thenable 是一个定义 then 方法的对象或函数,符合规范的 promise 需要支持 thenable。
-
测试自定义的 Promise 可以使用 promises-aplus-tests 工具。
-
修正构造 Promise 时调用 fulfillPromise 为 resolvePromise,以确保符合规范。
-
最终实现的 Promise 完整符合 Promises/A+ 规范。
延伸问答
Promise 的状态有哪些?
Promise 有三种状态:pending(待定)、fulfilled(已满足)、rejected(被拒绝)。
如何手写一个符合 Promises/A+ 规范的 Promise 类?
可以定义一个 MyPromise 类,包含状态、值、拒因及回调方法,并实现 then 方法和状态修改方法。
then 方法的作用是什么?
then 方法用于注册回调函数,并返回一个新的 Promise,允许对异步操作的结果进行处理。
如何处理 thenable 对象?
resolvePromise 方法用于处理 thenable 对象,确保其符合规范并正确决议 Promise。
如何测试自定义的 Promise 实现?
可以使用 promises-aplus-tests 工具来测试自定义的 Promise,确保其符合规范。
Promise 的状态是否可以改变?
Promise 的状态只能从 pending 转换为 fulfilled 或 rejected,一旦改变后不可再修改。