关于Promise.reject(new Error('出错!'))的几个相关问题!拜托了!

来源:4-8 用户被动退出解决方案之主动处理

knockkey

2022-01-19

老师您好, 我不会!
在request.js文件中, 在请求拦截器对token超时判断中, 如果超时, 执行登出并return Promise.reject(new Error('token 失效啦(原因超时)'))
我有如下几个小小小问题, 希望得到您的解答:

  1. 请求拦截器中没有ElMessage, 我测试了一下, 是响应拦截器中的错误回调的ElMessage生效了. 在请求拦截器中返回的错误, 为什么响应拦截器执行了ElMessage, 而且是发生在错误的回调中 (明明请求因为token超时没有发出去, 何来的响应呢? 我很奇怪响应拦截器是怎么拿到请求失败返回的错误的)
  2. Promise.reject(啦啦啦)中, 啦啦啦部分到底是异步执行还是同步执行, 因为我发现如果代码如下
function test() {
  return Promise.reject(new Error('网络请求出错!'))
}
test()
console.log("我执行了!");

输出的结果是
图片描述
因为后面的代码先执行了, 所以我判断是异步的, 但是如果代码如下

function test() {
  return Promise.reject(console.log('未使用new Error'))
}
test()
console.log("我执行了!");

得到的结果是
图片描述
因为是正常顺序, 所以我判断不出来在promise.reject(啦啦啦)啦啦啦到底是异步执行还是同步执行

  1. 判断出token超时后, 执行了store.dispatch('user/logout'), 既然最后一步是return Promise.reject(new Error('token 失效啦(原因超时)')). 那为什么不直接throw new Error('token失效')? 因为我觉得既然停在了必须要登录, 后面也不用担心因为抛出错误却没有try...catch...而导致代码不继续走的问题.
  2. promise.reject(new Error('xxx'))这样写的意义是? 好处是? 没搞定, 真不会
    问得有点多, 求助求助, 拜托了老师!!!
写回答

1回答

Sunday

2022-01-19

你好

问题一:

首先我们需要先明确一点,哪怕是 token 超时了,请求也是发送出去,并且服务端进行了处理,并给你返回了《token超时》这个错误的。因为有正常的响应,所以响应拦截器可以可以拦截到该响应

问题二:

promise 是用来处理异步问题的,但是在 new promise 时也有同步的操作。关于 promise 你可以看一下对应的文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise

问题三:

throw new Error('token失效') 会在控制台中打印出一个错误,但是 token 失效只是一个正常的业务体现,我们只需要给用户一个对应的提示就可以了。

问题四:

Promise.reject()方法返回一个带有拒绝原因的Promise对象。相当于直接让 promise 进入到了 reject 的状态。这是对应的 mdn 文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise/reject

关于 promise 还是看一下文档的好,因为回答的内容毕竟有限

0
1
knockkey
非常感谢!
2022-01-19
共1条回复

基于Vue3新标准,打造后台综合解决方案

基于Vue3重写Vue-element-admin,打造后台前端综合解决方案

1941 学习 · 1687 问题

查看课程