Вызов getItem() для объекта DynamoDB из AWS Lambda, почему мой обратный вызов не выполняется?
Я пытаюсь получить предмет из моей базы данных DynamoDB. В настоящее время мой код написан так, что мне не удается получить какие-либо данные из DynamoDB. Я, должно быть, делаю что-то не так, потому что, насколько я могу судить по моему тесту, мой обратный вызов не вызывается.
Вчера я провел весь день в этом и безуспешно возился с этим с тех пор, как проснулся этим утром.
Если кто-нибудь может дать представление о том, что я делаю здесь неправильно, я был бы очень благодарен. Спасибо всем заранее!
Последнее замечание: время ожидания самой функции Lambda установлено на 5 минут. Поэтому я не думаю, что лямбда-функция истекает до того, как запрос БД может вернуться. Когда я запускаю функцию, она выходит через мгновение.
const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB();
var response = null;
var test = false;
function getFromDB(callback) {
const params = {
TableName: process.env['DB_TABLE_NAME'] // evaluates to 'test-table',
Key: {
"id": {
S: postId // evaluates to a big string, pulling it in from an SNS message. Verified it with console.log(). It stores the expected value.
}
}
};
dynamodb.getItem(params, function(err, data) {
if (err) callback(data, true); // an error occurred
else callback(data, true); // successful response
});
}
getFromDB((data, isCalled) => {
response = data;
test = isCalled;
});
console.log(data); // evaluates to null
console.log(test); // evaluates to false
3 ответа
Я сталкивался с подобной проблемой. Я удалил async в приведенном ниже утверждении, чтобы решить:
exports.handler = async (event,context)
Я думаю, что происходит то, что Lambda вызывает функцию, но она не собирается ждать обратного вызова, поэтому думает, что это сделано и завершается.
Я думаю, что у меня была похожая проблема, и я решил ее, используя Bluebird и async/await.
Я могу предоставить фрагмент из моего кода, если вам это нужно
Вы загрузили SDK? Я не вижу этого в вашем фрагменте кода
// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region
AWS.config.update({region: 'REGION'});
РЕДАКТИРОВАТЬ: Включенный регион