关于Promise.reject(new Error('出错!'))的几个相关问题!拜托了!
来源:4-8 用户被动退出解决方案之主动处理
knockkey
2022-01-19
老师您好, 我不会!
在request.js文件中, 在请求拦截器对token超时判断中, 如果超时, 执行登出并return Promise.reject(new Error('token 失效啦(原因超时)'))
我有如下几个小小小问题, 希望得到您的解答:
- 请求拦截器中没有ElMessage, 我测试了一下, 是响应拦截器中的错误回调的ElMessage生效了. 在请求拦截器中返回的错误, 为什么响应拦截器执行了ElMessage, 而且是发生在错误的回调中 (明明请求因为token超时没有发出去, 何来的响应呢? 我很奇怪响应拦截器是怎么拿到请求失败返回的错误的)
- 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(啦啦啦)
中啦啦啦
到底是异步执行还是同步执行
- 判断出token超时后, 执行了
store.dispatch('user/logout')
, 既然最后一步是return Promise.reject(new Error('token 失效啦(原因超时)'))
. 那为什么不直接throw new Error('token失效')
? 因为我觉得既然停在了必须要登录
, 后面也不用担心因为抛出错误
却没有try...catch...
而导致代码不继续走的问题. - 用
promise.reject(new Error('xxx'))
这样写的意义是? 好处是? 没搞定, 真不会
问得有点多, 求助求助, 拜托了老师!!!
1回答
-
你好
问题一:
首先我们需要先明确一点,哪怕是 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 还是看一下文档的好,因为回答的内容毕竟有限
012022-01-19
相似问题
回答 1
回答 1