但是使用return Promise.reject() 传一个普通对象时,最后走的是then
时间: 2024-02-27 08:54:21 浏览: 253
如果你在响应拦截器中返回一个拒绝状态的 Promise 对象,并且该对象的值是一个普通的 JavaScript 对象,那么它会被视为一个成功状态的 Promise 对象并返回到 `then` 方法中。这是因为,`then` 方法的第一个回调函数的参数是成功状态的值,而第二个回调函数的参数是失败状态的值。因此,如果你传递一个普通对象作为拒绝状态的值,它会被视为一个普通的成功状态的值而不是一个异常对象。
如果你想让接口返回成功的情况下也走 `catch`,你需要手动抛出一个异常对象,例如:
```javascript
axios.interceptors.response.use(function (response) {
// 成功返回数据
if (response.status >= 200 && response.status < 300) {
return response.data;
} else {
// 手动抛出异常
throw { message: '接口返回异常' };
}
}, function (error) {
// 返回错误
return Promise.reject(error);
});
```
这样,即使接口返回成功,也会走到 `catch` 中。
相关问题
return Promise.reject 和 Promise.reject的区别
Promise.reject和return Promise.reject的区别在于使用方式和返回值的处理。
1. 使用方式:return Promise.reject可以直接在函数中使用return语句返回一个Rejected状态的Promise对象,而Promise.reject需要通过Promise.reject(reason)方法来返回一个Rejected状态的Promise对象。
2. 返回值的处理:return Promise.reject将Rejected状态的Promise对象作为函数的返回值直接返回,可以在函数外部使用.catch方法来处理被拒绝的Promise。而Promise.reject需要在.then方法中使用.reject方法或.catch方法来处理被拒绝的Promise。
例如,使用return Promise.reject('error')会直接返回一个Rejected状态的Promise对象,并且可以在调用函数的地方使用.catch方法来捕获并处理这个被拒绝的Promise。而Promise.reject('error').catch会将错误传递给.catch方法来处理。
总结起来,return Promise.reject可以更方便地在函数中返回一个被拒绝的Promise对象,而Promise.reject需要在.then方法或.catch方法中处理被拒绝的Promise对象。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [Promise.resolve() 和Promise.reject() 使用及其覆盖场景](https://blog.csdn.net/qq_40696108/article/details/123063870)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
return Promise.reject 和直接Promise.reject的区别
return Promise.reject 和直接 Promise.reject 的区别在于返回值的不同。当使用 return Promise.reject 时,它会返回一个被拒绝的 Promise 对象,该对象的状态为 Rejected,并且传递给它的参数将作为拒绝的原因。这意味着该 Promise 对象将触发 catch() 或者 then() 方法中的拒绝回调函数。
而直接使用 Promise.reject 则是调用 Promise.reject 方法,返回一个新的 Promise 对象,状态为 Rejected,不会返回给调用者。这意味着需要手动处理该 Promise 对象的拒绝回调函数。
所以,return Promise.reject 可以方便地将 Promise 的拒绝原因传递给调用者,而直接 Promise.reject 则需要手动处理拒绝回调函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [手写promise原理系列七:封装Promise.reject方法,Promise.reject的用法](https://blog.csdn.net/ThisEqualThis/article/details/129497731)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* [Promise.resolve() 和Promise.reject() 使用及其覆盖场景](https://blog.csdn.net/qq_40696108/article/details/123063870)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文