Tengo este fragmento de código (parte de una función), observe el " BadURL " al final de la URL:
importar axios desde "axios";
try { return axios.post("http://localhost:5000/api/featureFlagBadURL", { flagName: "newJqueryAjaxListener", defaultValue: "false", }); } catch (error) { return { data: 'false' } } Pero no puede entrar en el bloque catch , dice:
(node:7676) UnhandledPromiseRejectionWarning: Error: Request failed with status code 404Puedo detectar el error solo si envuelvo la llamada de función fuera de la clase
Axios.post(...) es una llamada asíncrona que devuelve una promesa, esa declaración no falla, e incluso si lo hace, no se debe a que falle la solicitud HTTP.
Lo que necesita usar son los .then() y .catch() de la promesa devuelta para manejar la solicitud.
return axios.post("http://localhost:5000/api/featureFlagBadURL", { flagName: "newJqueryAjaxListener", defaultValue: "false" }).then((results) => { console.log('yay', results); }).catch((error) => { console.log('oops', error); }); Otra alternativa es usar 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' }; } })Prueba de esta manera:
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 });Puede detectar el error y verificar el código de estado. entonces puedes manejarlo. Tal vez cambie el caso de bruja o simplemente si. Lo hago por 404. ver el bacalao a continuación:
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" } } }