Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

224
Vistas
Cómo detectar errores en funciones asíncronas anidadas

Estoy tratando de detectar un error en las funciones asíncronas anidadas para hacer una reversión si hay un error.

Así que tengo mi primer intento de captura, luego dentro llamo a una función que llama a otra función, la última función debería arrojar un error, pensé que el primer bloque de intento atraparía el error de lanzamiento, pero no lo hace. Este es mi código:

La función con el primer intento/captura:

 exports.add = (req, res) => { const { product, type } = req.body try { switch (type) { case ProductsTypes.TRACK: addTrack(product, req.files) res.status(200).json({ message: 'SUCCESS !' }) break default: res.status(400).json({ message: 'INVALID TYPE !' }) } } catch (error) { // ROLLBACK HERE res.status(400).json({ message: "Error Exception, Need to rollback", error }) } }

La función en la que pensé en detectar el error para devolverlo a la parte superior

 const addTrack = (product, files) => { const imageFile = files[NamesAddTrackForm.TRACK_IMAGE][0] const audioFile = files[NamesAddTrackForm.TRACK_AUDIO][0] const stemsZip = files[NamesAddTrackForm.TRACK_STEMS][0] FilesFormater.resizeImage(imageFile, 500, 500) // I thought this function throw an exception }

La función donde tiro el error:

 resizeImage = (file, width, height) => { try { sharp(file.path) .resize(width, height) .jpeg({ quality: 90 }) .toBuffer((err, buffer) => { fs.writeFileSync(file.path, buffe, (err) => { // I simulate an error here (buffe) instead (buffer) if (!err) { throw Error(err) } }) }) } catch (error) { throw Error(error) } }

Me gustaría saber cómo poder manejar este tipo de errores para devolverlo al primero, porque me gustaría usar esta lógica en mis otros archivos para revertir acciones como insertar en la base de datos o crear archivos. , si aparece un error durante el procesamiento del código, porque de lo contrario termino con datos ilógicos

about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

Debe hacer resizeImage para devolver una promesa si desea detectar el error de una operación asincrónica.

Además, debe agregar la palabra clave async en la función, para que pueda usar await .

Puede intentar lo siguiente: (Código no probado).

 const fs = require("fs").promises; class FilesFormater { static resizeImage = async (file, width, height) => { try { const { data } = await sharp(file.path) .resize(width, height) .jpeg({ quality: 90 }) .toBuffer(); await fs.writeFile(file.path, data); } catch (error) { throw new Error(error); } }; } const addTrack = (product, files) => { const imageFile = files[NamesAddTrackForm.TRACK_IMAGE][0]; const audioFile = files[NamesAddTrackForm.TRACK_AUDIO][0]; const stemsZip = files[NamesAddTrackForm.TRACK_STEMS][0]; return FilesFormater.resizeImage(imageFile, 500, 500); // a Promise is return. }; exports.add = async (req, res) => { const { product, type } = req.body; try { switch (type) { case ProductsTypes.TRACK: await addTrack(product, req.files); // await the Promise res.status(200).json({ message: "SUCCESS !" }); break; default: res.status(400).json({ message: "INVALID TYPE !" }); } } catch (error) { // ROLLBACK HERE res.status(400).json({ message: "Error Exception, Need to rollback", error, }); } };
about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda