我努力使自己的node.js代码能够按我的意愿运行。 它用于AWS Lambda函数。
代码在DynamoDB中扫描并输出整个表。 问题是我几乎从没有在控制台中输出readdb函数中的console.log(“ DB SCANNED!”)(并且没有值加载到“ items”)。
var AWS = require('aws-sdk');
AWS.config.update({region: 'eu-west-1'});
var ddb = new AWS.DynamoDB({apiVersion: '2012-10-08'});
var table = "TABLE";
var paramsRead = {
TableName: table,
};
exports.handler = async (event) => {
await readdb();
console.log("END");
};
function readdb(){
ddb.scan(paramsRead, function(err, data) {
if (err) {
console.log("Error reading DynamoDB", err);
} else {
console.log("DB SCANNED!");
var items = JSON.stringify(data.Items);
let response = {
statusCode: 200,
body: items,
};
}
}
);
}
答案 0 :(得分:3)
Lambda完成得太快了,因为您实际上并没有从readdb
到await
返回任何内容。
您需要返回Promise
function readdb() {
return new Promise((resolve, reject) => {
ddb.scan(paramsRead, (err, data) => {
if (err) {
console.log("Error reading DynamoDB", err);
reject(err);
} else {
console.log("DB SCANNED!");
var items = JSON.stringify(data.Items);
resolve({
status code: 200,
body: items
});
}
})
});
}
...
const response = await readdb();