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

关于JavaScript Promises及可选参数的调用逻辑疑问

JavaScript Promise 如何确定触发then的哪个回调?

首先明确核心结论:Promise 完全是按参数位置来识别要调用的函数,和你给参数起的名字毫无关系。

Promise 构造函数接收的 executor 函数(即你传入的带两个参数的回调),它的两个参数是严格按位置定义的:

  • 第一个位置的参数:内置的 resolve 函数,调用它会把 Promise 状态改为 fulfilled,触发后续 then 的第一个回调
  • 第二个位置的参数:内置的 reject 函数,调用它会把 Promise 状态改为 rejected,触发后续 then 的第二个回调(或 catch 回调)

你遇到的两种情况本质是一回事:
比如第一段代码:

new Promise((resolve, second) => {
  second('2');
}).then(res => console.log(res), err => console.log(err));

这里的 second 只是你给第二个位置参数起的别名,它本质就是 reject 函数,调用它自然会触发 then 的第二个回调输出"2"。

第二段代码:

new Promise((first, third) => {
  third('2');
}).then(res => console.log(res), err => console.log(err));

同理,third 还是占据了 executor 函数的第二个参数位置,它依然是 reject 函数,调用后同样触发 then 的第二个回调。

简单总结:不管你给 executor 的参数起什么名字,第一个参数永远是 resolve,第二个永远是 reject,调用哪个位置的函数,就对应触发 Promise 对应的状态和后续回调。

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:30:55