Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

220
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda