为何Promise被reject后经.then处理状态变为fulfilled?
为什么Promise的错误回调返回值会让最终Promise变为fulfilled状态?
这是Promise的核心特性:.then()方法会返回一个全新的Promise实例,这个新Promise的状态完全由你在回调函数里的操作决定。
具体到你的代码:
- 初始Promise被
rej("Error goes here")标记为rejected状态,触发.then()的第二个错误回调函数。 - 你在错误回调里执行了
return error;——这里返回的是一个普通字符串(哪怕它是错误信息),属于「正常返回值」。 - 根据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
相关产品推荐
相关产品推荐

