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

225
Views
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 answers
Answer question

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 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!