AWS Lambda с DynamoDb нет результатов
Я только начинаю с AWS
и не могу получить DynamoDB
работает на всех.
Я следовал за учебником и создал все AWS
элементы и установить привилегию для DynamoDB
в lambda
Базовый профиль.
Мне интересно, почему я не получаю никаких результатов от DB
или любые сообщения об ошибках. Я поместил некоторые журналы консоли в код для устранения неполадок:
var AWS = require("aws-sdk");
AWS.config.update({
region: "eu-west-1",
});
var docClient = new AWS.DynamoDB.DocumentClient();
var params = {
TableName: "cooking_table",
Key:{
"data_type": "meal"
}
};
console.log("Scanning table.");
docClient.scan(params, onScan);
console.log("scan done");
function onScan(err, data) {
console.log("starting to scan");
if (err) {
console.error("Unable to scan the table. Error JSON:",
JSON.stringify(err, null, 2));
} else {
// print all the movies
console.log("Scan succeeded.");
data.Items.forEach(function(movie) {
console.log(movie.data_type);
});
// continue scanning if we have more movies, because
// scan can retrieve a maximum of 1MB of data
if (typeof data.LastEvaluatedKey != "undefined") {
console.log("Scanning for more...");
params.ExclusiveStartKey = data.LastEvaluatedKey;
docClient.scan(params, onScan);
}
}
}
Удивительно, но я не получаю никаких записей журнала консоли внутри функции onScan
,
В журнале я вижу только вывод этих строк:
console.log("Scanning table.");
console.log("scan done");
но без ошибок.
Я не вижу большой ошибки, которую я делаю.
Что не так? Благодарю.
2 ответа
Сканирование - это асинхронное действие, при вызове которого выполняется обратный вызов, поэтому ваша проблема заключается в том, что ваша лямбда заканчивается до завершения этого действия, поэтому, вероятно, вы видите только эти 2 журнала без каких-либо ошибок / проблем или результата.
Я бы посоветовал посмотреть на Promise как возможное решение этой проблемы.
"Ключ" не является допустимым параметром для сканирования. Не совсем уверен, как выглядят ваши данные, но, возможно, вы хотите:
var params = {
TableName: "cooking_table",
FilterExpression: "data_type = meal"
};
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html
Кроме того, как отмечено в другом ответе, вы хотите сделать что-то вроде этого, чтобы фактически вызвать вызов сканирования, который возвращает объект запроса:
docClient.scan(params, onScan).send((err, data) =>
{
console.log("scan actually done for real");
});