Javascript AWS Lambda未运行DynamoDB命令:getItem或batchGetItem
我试图让batchGetItem()DynamoDB函数从表中返回值。但是,当调用时,它不会执行代码。我通过向代码的各个部分添加日志来测试这一点。我撕下了肉,但这是正在执行的代码(storageEvents.js):Javascript AWS Lambda未运行DynamoDB命令:getItem或batchGetItem,javascript,amazon-s3,amazon-dynamodb,aws-sdk,alexa,Javascript,Amazon S3,Amazon Dynamodb,Aws Sdk,Alexa,我试图让batchGetItem()DynamoDB函数从表中返回值。但是,当调用时,它不会执行代码。我通过向代码的各个部分添加日志来测试这一点。我撕下了肉,但这是正在执行的代码(storageEvents.js): “严格使用”; var AWS=要求(“AWS sdk”); var storageEvents=(函数(){ var dynamodb=新的AWS.dynamodb({apiVersion:'2012-08-10',region:'us-east-1'}); var s3=新的
“严格使用”;
var AWS=要求(“AWS sdk”);
var storageEvents=(函数(){
var dynamodb=新的AWS.dynamodb({apiVersion:'2012-08-10',region:'us-east-1'});
var s3=新的AWS.s3({apiVersion:'2012-08-10',region:'us-east-1'});
var myBucket='my.events';
var myObject='events.txt';
返回{
loadEvents:函数(会话、回调){
log('loadEvents');
dynamodb.batchGetItem({
请求项目:{
“事件数据”:{
关键点:[
{'country':{S:'USA'}
],
}
}
},函数(错误,数据){
log('batchGetItem');
var currentEventsList=“测试”;
回调(currentEventsList);
});
},
loadEvent:函数(会话、回调){
console.log('loadEvent');
dynamodb.getItem({
TableName:'EventsData',
键:{event_name:{S:'Fun event'}
},函数(错误,数据){
log('getItem');
var currentEventsList=“测试”;
回调(currentEventsList);
});
},
loadS3events:函数(会话、回调){
log('loadS3events');
s3.getObject({
桶:我的桶,
关键字:myObject
},函数(错误,数据){
log('getObject');
var currentEventsList=“测试”;
回调(currentEventsList);
});
}
};
})();
module.exports=存储事件代码>这是脚本上的输出
ReferenceError: session is not defined
at Object.<anonymous> (/home/ec2-user/testing/test/index.js:3:26)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
at startup (node.js:134:18)
at node.js:962:3
一切正常。我解决了问题。我一直在函数中调用storageEvents.loadEvents(),我是从handleFirstEvent()函数调用该函数的。因为它不是通过回调完成的,所以函数在收到数据之前退出。在我的loadUser()函数中,这是有效的,因为我使用的是来自主处理函数的回调。我现在明白了回调必须堆叠才能使用数据。我不确定我是否遵循了。本例中的会话是从intent传入的。您是如何获得上述输出的?我没有看到任何错误级别的日志记录可以告诉我出了什么问题。我还确认session.sessionId在包括loadEvents在内的每个步骤中都是相同的,因此它肯定不会错过会话。您只需运行脚本即可获得输出。此外,您没有记录任何错误,因此不会记录错误。这是在AWS Lambda的Alexa技能中运行的。我不仅仅是从命令行运行它。
loadEvents
batchGetItem
getEventsFromDynamoDb currentEventsList: test