Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

295
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda