嗨,我很抱歉,如果我的问题没有正确表达,那就很抱歉。
我想在全局函数中定义axios js的承诺。 在这里,我想要全局处理/捕获401状态并注销用户。 我不想在每个查询中处理它。
这是我处理请求的源全局函数:
export function requestData (url, payload = {}) {
return axios.post(url, payload)
.then(response => {
return response.data
})
.catch(error => {
if (error.response.status === 401) {
logout()
} else {
return error
}
})
}
这是我在控制器上使用的一个示例函数:
requestData('/api/persons', {options: this.options, search: search})
.then(data => {
this.data = data
})
.catch(error => {
this.error = error.toString()
})
我的问题是,当出现异常时,控制器中的promise catch不会触发。怎么实现这个?
答案 0 :(得分:3)
将return error
功能中的requestData
更改为throw error
答案 1 :(得分:1)
您可以在处理请求或响应之前拦截它们或捕获它们。
您将要使用Response Interceptor:
axios.interceptors.response.use(function(response) {
// Do something with response data
return response;
}, function(error) {
// Do something with response error
if (error.status === 401) {
logout()
}
return Promise.reject(error);
});
答案 2 :(得分:0)
return error
替换throw error
是一半的工作
当我正确时,promise中的throw error
catch将不会调用下一个promise .catch语句。这将在.then语句中起作用。
这样它应该有效:
export function requestData (url, payload = {}) {
return axios.post(url, payload)
.then(response => {
return response.data
})
.catch(error => {
if (error.response.status === 401) {
logout()
} else {
return error
}
})
.then(result => {
if (result instanceof Error) {
throw result
} else {
return result
}
})
}