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

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

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