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

296
Views
La variable node.js no sobrevive al bloque de código

Estoy experimentando con Node.js en AWS Lambda. Y me he encontrado con un problema con el siguiente código. El valor del resultado y el valor del error siempre se devuelven en blanco. Estoy bastante seguro de que esto es solo un problema de alcance que estoy demasiado cansado de ver. ¿Cómo capturo el valor devuelto y lo devuelvo en la respuesta? Estoy seguro de que los programas se están conectando a redis porque recibo un mensaje de error si cambio el puerto o la URL y no lo hago cuando están configurados correctamente.

El código de retorno:

 { "statusCode": 200, "body": "{\"key\":\"q1\"}" }

El código del programa:

 const Redis = require("ioredis"); const redis = new Redis(6379, 'fredflenstone.lhpxwy.az.0002.use2.cache.amazonaws.com'); exports.handler = async(event)=>{ let key=event.key; let response; let resultValue; let errorValue; redis.get(key, (err, result) => { if (err) { errorValue=err; } else { resultValue=result; } }); response={ key: key, resultValue: resultValue, errorValue: errorValue }; return { statusCode: 200, body: JSON.stringify(response) }; };
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

El problema se debe a las promesas. La ejecución de su controlador se completa antes de que redis devuelva el resultado. El siguiente fragmento debería funcionar:

 const Redis = require("ioredis"); const redis = new Redis(6379, 'fredflenstone.lhpxwy.az.0002.use2.cache.amazonaws.com'); exports.handler = async(event)=>{ let key=event.key; let response; let resultValue; let errorValue; try{ resultValue = await redis.get(key); }catch(error) { errorValue = error; } response={ key: key, resultValue: resultValue, errorValue: errorValue }; return { statusCode: 200, body: JSON.stringify(response) }; };
over 4 years ago · Santiago Trujillo Report

0

Es porque su llamada a "redis.get" no se resuelve cuando se envía "respuesta".

Tienes que esperar la respuesta:

 await new Promise((resolve) => { redis.get(key, (err, result) => { if (err) { errorValue=err; } else { resultValue=result; } resolve(); }); })

o incluso mejor, convierta la respuesta de redis en una respuesta de promesa:

 await new Promise((resolve, reject) => { redis.get(key, (err, result) => { if (err) { reject(err); } else { resolve(result); } }) }) .then((result) => resultValue = result) .catch((err) => errorValue = err)
over 4 years ago · Santiago Trujillo 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!