【发布时间】:2019-03-16 04:31:09
【问题描述】:
我正在使用带有 axios 和 redux-promise 的 React。 Axios 似乎没有捕获 404 错误,如下所示。
这是代码。
const url = FIVE_DAY_FORECAST_URL.replace("{0}", city);
axios.interceptors.response.use(function (response) {
return response;
}, function (error) {
return Promise.reject(error);
});
try{
const request = axios.get(`${url}`).then(e => {
debugger; }).catch(
e => {
debugger;
return "ERROR"; // THIS FIRES, BUT DOES NOT STOP THE CONSOLE ERROR
});
debugger;
return {
type: FETCH_FIVE_DAY_FORECAST,
payload: request
};
} catch {
debugger;
console.log("Error!"); // DOES NOT HELP AS THE 404 IS NOT A JAVASCRIPT ERROR, IT'S A VALID SERVER RESPONSE
}
}
我正在使用多种技术来捕获控制台错误:
.then() ==> 代码运行通过这个块,但是错误已经发生,并且已经写入控制台!
.catch() ==> 如果未配置拦截器,即注释掉
axios.interceptors.response.use...,代码将通过此块运行。try...catch ==> 无效(不捕获网络响应,因为这不是真正的 javascript 错误!)
【问题讨论】:
-
它只是在调试控制台上显示一条消息,但这不是错误,也不会中断您的代码执行。您的代码似乎按预期工作,而该日志消息真的是个问题?
-
同意,它“有效”,但环境被红色污染,这并不是真正的应用程序错误情况。随着这个应用程序的增长,我不希望它在没有任何错误的情况下标记噪音。
-
@Banoona 然后不要尝试获取不存在的资源,或者当您的意思不同时不要发送 404 错误。顺便说一句,您可以在控制台中隐藏消息。
-
谢谢@Bergi。不过,这并不是问题的真正答案。是的,我可以限制选项(例如通过下拉列表)。但这不是重点。 javascript 接口应该能够优雅地捕获 404 错误。 “找不到”是一个有效的响应,所以我应该能够捕捉到它并向用户显示“找不到位置”(控制台日志中没有任何噪音)另外,这不是我的 API,所以我无法控制状态返回代码。
-
@Banoona 您的 javascript 可以并且确实捕获 404 错误,您可以随意处理它(向用户显示消息)。这与控制台是否有用无关。用户不关心控制台日志。
标签: javascript reactjs axios