Estate atento ya que en este artículo vas a hallar el hallazgo que buscas.
Solución:
Entonces, resulta que el código es correcto. El problema es que la API de dynamodb utiliza todas esas devoluciones de llamada y, básicamente, la función finaliza ANTES de que se hayan recuperado los datos.
La solución más rápida es eliminar el context.succeed()
llamar y los datos serán recuperados. Por supuesto, usar el módulo asíncrono ayudaría y si no desea usarlo, simplemente agregue un contador o un valor booleano a su devolución de llamada y luego espere hasta que el valor haya cambiado, lo que indica que se ha llamado a la devolución de llamada (lo que apesta si lo piensas)
Tuve algunos problemas similares y no encontré muchos recursos útiles. Esto es lo que terminé haciendo. Probablemente alguien más inteligente pueda decirnos si esto es lo mejor.
function getHighScores(callback)
var params =
TableName : 'sessions',
ScanFilter: "score":"AttributeValueList":["N":"0"], "ComparisonOperator":"GT",
;
var dynamo = new AWS.DynamoDB();
dynamo.scan(params, function(err, data)
if (err)
console.log (err)
callback(err);
else
callback(data.Items);
console.log(data.Items);
);
getHighScores(function (data)
console.log(data);
context.succeed(data);
);
En resumen, tener el passback de devolución de llamada a través de la función principal a la función más pequeña, permite que la aplicación continúe hasta completar el Dynamo. Mantenga el contexto. Tenga éxito en la función secundaria o continúe con otra función allí.
Mi problema es que mi lambda se estaba ejecutando en una VPC para conectarse a ElastiCache. Esto hace que las consultas a los recursos públicos de Internet, como DynamoDB y API Gateway, se bloqueen indefinidamente. Tuve que configurar una puerta de enlace NAT dentro de mi VPC para acceder a DynamoDB.
Reseñas y calificaciones
Agradecemos que desees sustentar nuestra misión añadiendo un comentario y puntuándolo te damos las gracias.