You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:22:18