Node.js on AWS Lambda and DynamoDB



我正在尝试创建一个Lambda函数来生成.js脚本(以便与Chart.js一起使用(。

这个脚本向DynamoDB中的一个表发送一个查询,并在.js文件(存储在S3存储桶中(中输出结果。

我花了很多小时试图让它发挥作用,但我在Node.js上遇到了一些经典问题:回调函数和变量范围的顺序。

这是我使用的代码:

var AWS = require('aws-sdk');
AWS.config.update({region: 'eu-west-1'});
var s3 = new AWS.S3();
var tweetValue ;
var neutralValue ;
var destBucket = "twitterappfront1";
var ddb = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});
function sentimentVal(inputparams) {
//    function resultrequest() 
ddb.get(inputparams, function(err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data.Item);
//Catch tweets number in DynamoTB table and store un descriptor 
var numtweets = (JSON.parse(JSON.stringify(AWS.DynamoDB.Converter.marshall(data.Item)))).tweets ;
var tweetsObject = Object.getOwnPropertyDescriptor(numtweets, 'N') ;
tweetValue = tweetsObject.value ;
console.log ("test stringify = ", numtweets) ;
console.log (tweetsObject.value) ;
console.log ("Value = ", tweetValue) ;
return tweetValue ;
}
});
}
exports.handler = (event) => {
// Read options from the event.
var paramsNeutral = {
TableName: 'twitterSentiment',
Key: { 'sentiment':'NEUTRAL' }
};
// Call sentimentVal function with paramsNeutral, and setNeutralValue callback function
// 
sentimentVal(paramsNeutral, setNeutralValue);
function setNeutralValue (error, tweetValue) {
if (error) console.error('ERROR !', error) ;
else console.log ('callback tweetValue = ', tweetValue) ;
}
};

我的问题是,回调函数似乎从未使用过:我没有控制台输出"ERROR"或"callback tweetValue=">

我不明白如何从sentvimentVal函数中获取值。我试过"退货",但我不知道这是不是正确的方式。

你能帮帮我吗?

谢谢

您并不是在等待DynamoDB的更新完成。

更新它以返回promise并使用async/await

async function sentimentVal(inputparams) {
try {
//    function resultrequest() 
const data = await ddb.get(inputparams).promise()
console.log("Success", data.Item);
//Catch tweets number in DynamoTB table and store un descriptor 
var numtweets = (JSON.parse(JSON.stringify(AWS.DynamoDB.Converter.marshall(data.Item)))).tweets ;
var tweetsObject = Object.getOwnPropertyDescriptor(numtweets, 'N') ;
tweetValue = tweetsObject.value ;
console.log ("test stringify = ", numtweets) ;
console.log (tweetsObject.value) ;
console.log ("Value = ", tweetValue) ;
return tweetValue ;
} catch (err) {
console.log("Error", err);
throw err
}
}

并在处理程序中等待

exports.handler = (event) => {
// Read options from the event.
var paramsNeutral = {
TableName: 'twitterSentiment',
Key: { 'sentiment':'NEUTRAL' }
};
// Call sentimentVal function with paramsNeutral, and setNeutralValue callback function
// 
const tweet = await sentimentVal(paramsNeutral, setNeutralValue);
function setNeutralValue (error, tweetValue) {
if (error) console.error('ERROR !', error) ;
else console.log ('callback tweetValue = ', tweetValue) ;
}
};

我不确定setNeutralValue应该做什么。

最新更新