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

为何Promise.prototype.then允许省略reject函数且支持末尾逗号?

为什么Promise.then带尾随逗号的调用不会报错?

最近在MDN的Promise相关文章里看到这样的代码:

.then((url) =>
    fetch(url)
      .then((res) => res.json())
      .then((data) => {
        listOfIngredients.push(data);
      }), // 注意这里的尾随逗号
  )

简化后等价于:

.then(successFunc,);

甚至下面这段代码也能正常运行,不会报错:

const speakPromise = new Promise((resolve, reject) => {
    setTimeout(() => {        
        resolve("success");
    }, 500);    
});

speakPromise.then(function (data) {
    console.log(data, " End code");
}, ); // 注意这里的尾随逗号

原因解析

这是因为JavaScript从ES2017开始支持函数参数列表末尾的尾随逗号,不管是普通函数调用、方法调用,还是函数定义时的参数列表,都允许这种写法。

对于Promise.then()方法来说,它接受两个可选参数:第一个是Promise成功时的回调函数,第二个是Promise失败时的回调函数。当你在第二个参数位置只写了一个尾随逗号时,这个位置会被解析为undefined,而then方法本身允许第二个参数缺省(或者传undefined)——此时Promise被拒绝时不会触发任何自定义的失败回调,程序会继续正常执行,不会抛出语法错误。

这种尾随逗号的设计主要是为了方便代码维护:比如在添加新参数时,不需要修改上一行的代码(避免漏加逗号导致的语法错误),同时也让版本控制系统的变更记录更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:45:29