JavaScript中Promise的resolve和reject函数来自何处?
Promise构造函数中resolve/reject函数的来源解析
你完全可以把这两个函数理解成JavaScript引擎自动递到你手里的“状态开关”——既不是来自Promise类,也不需要你自己定义,是语言层面内置的工具。
具体来说:
- 当你执行
new Promise(回调函数)时,JavaScript引擎会立刻调用你传入的这个回调,同时把两个预定义好的函数作为参数传进去。你给它们起什么名字都行(比如你示例里的Resolved、Rejected,或者常用的resolve、reject),本质都是这两个内置函数。 - 第一个函数的作用是把当前Promise实例的状态从
pending(等待)切换到fulfilled(成功),同时可以传递成功的结果;第二个函数则是切换到rejected(失败)状态,传递失败原因。
为什么说它们不是来自Promise类?
Promise类本身的静态方法比如Promise.resolve()、Promise.reject()是直接返回一个新的已决议的Promise实例,而你在构造函数里拿到的这两个函数,是专门绑定当前正在创建的这个Promise实例的——调用它们只会改变当前实例的状态,和静态方法完全是两回事。
用伪代码模拟一下引擎的行为,你就能更清楚:
// 你写的回调 const yourExecutor = (Resolved, Rejected) => { Resolved("Success"); }; // 引擎内部的逻辑(简化版) function createPromise(executor) { // 为当前Promise实例生成专属的状态切换函数 const resolve = (value) => { // 把当前Promise的状态改成fulfilled,保存value }; const reject = (reason) => { // 把当前Promise的状态改成rejected,保存reason }; // 立刻执行你传入的回调,把这两个函数传进去 executor(resolve, reject); } // 你调用new Promise时,其实就是触发上面的逻辑 const promiseTest = createPromise(yourExecutor);
简单总结:这两个函数是JavaScript语言在创建Promise实例时,自动提供给你的专属工具,用来控制这个实例的状态流转,名字可以随便取,但功能是语言内置好的。
内容的提问来源于stack exchange,提问作者Nima Sherpa
相关产品推荐
相关产品推荐

