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

204
Views
¿Por qué este módulo devuelve indefinido?

Estoy escribiendo un código en NodeJs usando jimp y qrcode-reader. Esas dependencias funcionan bien. El problema radica cuando exporto el código a un módulo. Y supuestamente, debería devolver un valor. Esta es una función de flecha que devuelve la URL del código QR. Sin embargo, si uso "console.log", puedo ver que funciona. Pero cuando uso el módulo, devuelve indefinido. Tal vez me estoy perdiendo algo realmente simple.

Aquí está el código del módulo:

 const Jimp = require('jimp') const fs = require('fs') const QrCode = require('qrcode-reader') const scanQR = (source) => { const buffer = fs.readFileSync(source) Jimp.read(buffer, (err, image) => { try { const qr = new QrCode() qr.callback = (error, value) => { try { console.log(value.result) return value.result } catch(error) { console.error(error) } } qr.decode(image.bitmap) } catch (error) { console.error(error) } }) } module.exports = scanQR

Aquí está el módulo importado:

 const scanQR = require('./utils/scanQR') const qr_code_screenshot = `${__dirname}/assets/images/qrcode-test.png` const result = scanQR(qr_code_screenshot) console.log(result)

Aquí está el resultado en la consola: resultado de la consola

Gracias por adelantado.

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

0

Su función scanQR no devuelve nada: y por lo tanto, cuando asigna su valor de retorno, obtiene undefined . Eso se espera . Los problemas provienen de que intenta devolver algo dentro de una devolución de llamada que solo se activa de forma asíncrona.

Para resolver este problema, deberá envolver la lógica interna en una promesa (que se devuelve). Luego, puede resolver/rechazar la promesa en función de si el código se ejecutó correctamente o arrojó un error:

 const scanQR = (source) => { // Wrap all logic inside a promise, which you return return new Promise((resolve, reject) => { const buffer = fs.readFileSync(source); Jimp.read(buffer, (err, image) => { try { const qr = new QrCode(); qr.callback = (error, value) => { try { // Resolve promise here resolve(value.result); } catch(error) { // Reject promise reject(error); } } qr.decode(image.bitmap); } catch (error) { reject(error); } }); }); }

Al consumir el módulo, deberá usar .then() :

 const scanQR = require('./utils/scanQR'); const qr_code_screenshot = `${__dirname}/assets/images/qrcode-test.png`; // `scanQR` returns a promise and you will need to use `.then()` scanQR(qr_code_screenshot).then(data => console.log(data));

...o use async/await: esta es una de las muchas maneras de hacerlo:

 const scanQR = require('./utils/scanQR'); async function scan(image) { const result = await scanQR(image); console.log(result); } scan(`${__dirname}/assets/images/qrcode-test.png`);
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!