Te traemos el resultado a este dilema, al menos eso pensamos. Si tienes dudas puedes dejarlo en el apartado de comentarios y con placer te responderemos
Solución:
De este número de axios (Gracias a zhuyifan2013 por dar la solución), he encontrado que axiostimeout
es tiempo de espera de respuesta no el tiempo de conexión expiro.
Digamos que ha solicitado la URL a través de axios y el servidor está tardando mucho en responder, en este caso el axios el tiempo de espera funcionará.
Pero no tiene conexión a Internet o la dirección IP o el nombre de dominio que está solicitando no está allí, en este caso axios el tiempo de espera no funcionará.
Tienes que usar el siguiente código
let source = CancelToken.source();
setTimeout(() =>
source.cancel();
// Timeout Logic
, 10000);
axios.get(ip + '/config', cancelToken: source.token).then((result) =>
// Handle your response
);
Tenga en cuenta que si tiene una conexión válida, todavía el Lógica de tiempo de espera el bloque se ejecutará.
Debe crear una instancia del cliente http axios:
const httpClient = axios.create();
httpClient.defaults.timeout = 500;
A continuación, puede utilizar el httpClient de la siguiente manera:
return httpClient.post(`$ROOT_URL/login/$role`, creds)
.then(handleResponse)
En una nota al margen, también puede configurar la URL base en la misma configuración en lugar de usar $ROOT_URL
:
httpClient.defaults.baseURL = ROOT_URL
Este código funciona para mí:
axios(
method: "post",
url: 'http://example.com/api',
timeout: 1000 * 5, // Wait for 5 seconds
headers:
"Content-Type": "application/json"
,
data:
id: 1234
)
.then(response =>
const serverResponse = response.data;
// do sth ...
)
.catch(error =>
console.log(error);
);
Si el servidor no responde en 5 segundos, entra en bloqueo catch.
Esto también es útil: #1503