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

为何Promise被reject后经.then处理状态变为fulfilled?

为什么Promise的错误回调返回值会让最终Promise变为fulfilled状态?

这是Promise的核心特性:.then()方法会返回一个全新的Promise实例,这个新Promise的状态完全由你在回调函数里的操作决定。

具体到你的代码:

  1. 初始Promise被rej("Error goes here")标记为rejected状态,触发.then()的第二个错误回调函数。
  2. 你在错误回调里执行了return error;——这里返回的是一个普通字符串(哪怕它是错误信息),属于「正常返回值」。
  3. 根据Promise规则,只要回调函数正常返回一个值(不是抛出错误,也不是返回rejected状态的Promise),.then()返回的新Promise就会以这个值为结果,变成fulfilled状态。

如果想让新Promise保持rejected状态,有两种常用写法:

  • 在错误回调里抛出错误,让新Promise捕获到这个错误并变为rejected:
var myPromise = new Promise((res, rej)=>{
    rej("Error goes here")
})
.then(function(a){}, 
      function(error) {
    throw error; // 抛出错误,新Promise变为rejected
})
  • 返回一个已经被reject的Promise实例:
var myPromise = new Promise((res, rej)=>{
    rej("Error goes here")
})
.then(function(a){}, 
      function(error) {
    return Promise.reject(error); // 返回rejected状态的Promise
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:42:34