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

271
Views
Cambie el tamaño de la imagen base64 y obtenga el valor de retorno de la función en nodejs
async function imgResize(data){ // Convert base64 to buffer => <Buffer ff d8 ff db 00 43 00 ... const buffer = Buffer.from(data, "base64"); Jimp.read(buffer, (err, res) => { if (err) throw new Error(err); console.log("Original image size: "+res.getWidth()+"x"+res.getHeight()) if (res.getWidth() > 1025){ res.resize(1025, Jimp.AUTO) console.log("resized image size: "+res.getWidth()+"x"+res.getHeight()) } res.getBase64(Jimp.AUTO, (err, value)=>{ if(err){return err)} return value; }) } const img = await imgResize(base64data)

Obtengo, SyntaxError: await solo es válido en funciones asíncronas y los cuerpos de módulos de nivel superior. Pero si elimino el asíncrono y solo imprimo el valor sin devolverlo, funciona bien. Entonces, ¿cómo podré obtener el valor de esa función como valor de retorno y mantenerlo en una variable?

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

0

No puede devolver valores dentro de una devolución de llamada asincrónica y esperar que se asignen a una variable. Node.js ejecuta las devoluciones de llamada asincrónicas en un momento posterior, momento en el que se pierde el contexto de ejecución. Por ejemplo, esto no funcionará:

 function getImageWidth(buffer) { Jimp.read(buffer, (err, res) => { // Outside context is lost and returning here doesn't // affect the return value of `getImageWidth` parent function return res.getWidth(); // won't work 🚫 } } const width = getImageWidth(buffer); console.log(width); // undefined

Para lograr lo que quieres, tienes dos opciones:

  1. Use una versión prometida de Jimp y siga usando async/await
  2. Convierta imgResize de async/await para usar una devolución de llamada

Resulta que Jimp devuelve una promesa si no pasa una función de devolución de llamada, por lo que optar por la solución n. ° 1 es más sencillo. La refactorización de devoluciones de llamada a async/await nos daría lo siguiente:

 async function imgResize(data) { const buffer = Buffer.from(data, "base64"); const res = await Jimp.read(buffer); console.log(`Original image size: ${res.getWidth()} x ${res.getHeight()}`); if (res.getWidth() > 1025){ res.resize(1025, Jimp.AUTO); console.log(`Resized image size: ${res.getWidth()} x ${res.getHeight()}`); } return res.getBase64Async(Jimp.AUTO); } const img = await imgResize(base64data);

Nota: Para que esto funcione, debe tener habilitada la espera de nivel superior mediante el uso de Módulos ES (ESM). De lo contrario, debe envolver la última línea en un IIFE:

 (async () => { const img = await imgResize(base64data); )();
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!