Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

219
Views
Discord.js: (nodo: 147) UnhandledPromiseRejectionWarning: Error: se excedió el tiempo de espera de 1000 ms

Recientemente, por alguna razón desconocida, comencé a ver errores regulares en la consola. Como esto:

 (node:147) UnhandledPromiseRejectionWarning: Error: timeout of 1000ms exceeded at createError (/home/runner/ricebot/node_modules/axios/lib/core/createError.js:16:15) at RedirectableRequest.handleRequestTimeout (/home/runner/ricebot/node_modules/axios/lib/adapters/http.js:280:16) at RedirectableRequest.emit (events.js:314:20) at RedirectableRequest.EventEmitter.emit (domain.js:483:12) at Timeout._onTimeout (/home/runner/ricebot/node_modules/follow-redirects/index.js:166:12) at listOnTimeout (internal/timers.js:554:17) at processTimers (internal/timers.js:497:7)

A veces también hace que la latencia de mi bot vaya a 30000 ms.

Solo tengo partes de Axios en mis comandos divertidos y aquí hay uno de ellos (sin embargo, todavía funciona correctamente, solo registra el error):

 const url = 'https://no-api-key.com/api/v2/animals/cat'; let image; let fact; try { const { data } = await axios.get(url); console.log(data); image = data.image; fact = data.fact; } catch (e) { console.log(e) return message.channel.send('An error occured, please try again!'); }

Esto no solía ser una cosa.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Dado que su llamada axios no tiene captura, es normal recibir este error o advertencia.

Es importante administrar las solicitudes de axios para evitar este tipo de problemas. Además, supongo que a la muestra que muestra le faltan algunos datos porque no necesitará definir variables de resultado fuera del estado de captura, por lo que supongo que tiene un bucle o algo que también puede causar esto.

Si está realizando llamadas al mismo punto final en un bucle o con Promise.all, a veces necesita limitar las solicitudes simultáneas. Si no es el caso, ignore esta parte.

En primer lugar, asegúrese de configurar su valor axios.default.timeout correctamente para definir cuándo cancelar la solicitud si hubo respuesta.

Defina un estado de respuesta, verifique su con sus requisitos.

 function checkStatus(response) { if (response.status >= 200 && response.status < 300) { return response; } const error: any = new Error(response.statusText); error.response = response; throw error; }

Defina un código de análisis para asegurarse de tener siempre la misma estructura.

 function parseJSON(response) { return response.data; }

Defina una funcionalidad de captura para verificar errores y decidir si arrojar errores o simplemente registrarlos.

 function catchError(e){ console.error(e); // TODO send a message return null; }

Usémoslos en una sola llamada con .catch.

 const myResult = await axios.get(url) .then(checkStatus) .then(parseJSON) .catch(catchError); console.log(myResult);
about 4 years ago · Juan Pablo Isaza Report

0

si no me equivoco, no puede acceder a las propiedades de una promesa directamente, ya que declarar una variable de una propiedad es síncrono mientras que su método url() es asíncrono.
El tipo de datos de axios.get(url) es Promise cuando no se devuelve la respuesta, por lo que no tiene una propiedad data a la que accede desde el principio. Por lo tanto, debe esperar la respuesta. Como cuando se devuelve la respuesta, el tipo de datos de ese método cambia a lo que debería ser. Ahí es cuando puede acceder a la propiedad data . Entonces, creo que su código debería ser como el siguiente:

 const url = 'https://no-api-key.com/api/v2/animals/cat'; let image; let fact; try { const axiosUrl = await axios.get(url); const data = axiosUrl.data; console.log(data); image = data.image; fact = data.fact; } catch (e) { console.log(e) return message.channel.send('An error occured, please try again!'); }

Suponiendo que este bloque de código esté en un contexto asíncrono, debería funcionar bien.
Espero que esta respuesta te haya sido de utilidad.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!