关于Promise实例中resolve、reject参数来源的技术咨询
解惑:Promise构造函数里的resolve和reject到底是谁传的?
这绝对是刚上手Promise时最容易卡壳的问题之一,我当年第一次写Promise的时候也盯着这个点想了好久!来给你把逻辑拆明白:
当你调用 new Promise(executor) 时,这个executor(就是你写的那个带resolve、reject参数的函数)是由JavaScript原生的Promise构造函数主动调用的,而resolve和reject这两个函数,就是Promise构造函数提前定义好、专门用来让你通知异步操作结果的工具函数——它们会作为参数被Promise构造函数“塞”进你的executor里。
举个简单的自定义模拟例子,你一看就懂:
// 模拟一个极简版的Promise构造函数 function MyPromise(executor) { // 先在构造函数内部定义好resolve和reject function resolve(result) { console.log('异步操作成功啦!结果是:', result); // 原生Promise这里还会处理状态变更、触发then回调等逻辑 } function reject(error) { console.log('异步操作失败了...原因是:', error); // 原生Promise这里会处理状态变更、触发catch回调等逻辑 } // 关键:调用传入的executor,把刚定义的resolve和reject传进去 executor(resolve, reject); } // 调用这个自定义Promise,和原生写法一模一样 new MyPromise((resolve, reject) => { setTimeout(() => { resolve('找到参数函数啦'); }, 5000); });
原生Promise的resolve和reject内部逻辑比这个复杂得多——比如它们会严格控制Promise的状态只能从pending变到fulfilled/rejected,而且状态一旦改变就不能再改,还会把结果或错误保存下来,等着后续的.then()或.catch()来取。但核心逻辑和上面的模拟代码是一致的:resolve和reject是Promise构造函数给你提供的“回调工具”,用来让你在异步操作完成时告诉Promise该怎么处理后续流程。
简单说就是:你只管在executor里调用resolve或reject来通知结果就行,这俩函数的定义和传递,都是Promise构造函数帮你搞定的~
内容的提问来源于stack exchange,提问作者Ho.Chun
相关产品推荐
相关产品推荐

