我有这段代码(函数的一部分),注意">BadURL";在URL的末尾:
import axios from ";
try {
return axios.post("http://localhost:5000/api/featureFlagBadURL", {
flagName: "newJqueryAjaxListener",
defaultValue: "false",
});
} catch (error) {
return { data: 'false' }
}
但是不能进入catch
块,说:
(node:7676) UnhandledPromiseRejectionWarning: Error: Request failed with status code 404
只有当我将函数调用本身包装在类之外时才能捕获错误
Axios.post(...)
是一个异步调用,它返回一个承诺,该语句不会失败,即使它失败,也不是因为HTTP请求失败。
您需要使用的是返回承诺的.then()
和.catch()
方法来处理请求。
return axios.post("http://localhost:5000/api/featureFlagBadURL", {
flagName: "newJqueryAjaxListener",
defaultValue: "false"
}).then((results) => {
console.log('yay', results);
}).catch((error) => {
console.log('oops', error);
});
另一种选择是使用async
await
。
async function handler() {
try {
const results = await axios.post("http://localhost:5000/api/featureFlagBadURL", {
flagName: "newJqueryAjaxListener",
defaultValue: "false",
});
console.log('yay', results);
}
catch (error) {
console.log('oops', error);
return { data: 'false' };
}
})
试试:
return axios.post("http://localhost:5000/api/featureFlagBadURL", {
flagName: "newJqueryAjaxListener",
defaultValue: "false",
}).then(function (response) {
// handle success
console.log(response);
}).catch(function (error) {
// handle error
console.log(error);
}).then(function () {
// always executed
});
来源您可以捕获错误并检查状态码。那你就能处理好。也许是女巫开关案或者简单的如果。我这样做是为了404。请看下面的代码:
axios.post("http://localhost:5000/api/featureFlagBadURL", {
flagName: "newJqueryAjaxListener",
defaultValue: "false",
}).then((res) => {
// handle response => res.data
console.log(response);
}).catch((error) => {
if (error.response) {
if(error.response.status === 404) {
console.log('BAD URL')
// or
console.log(error.response.statusText) // "Not Found"
}
}
}