我在DynamoDB客户端遇到一个小问题。我正在开发一种需要从DynamoDB表中获取一些数据的技能。表和数据都在那里。由于某种原因,我无法触发调用(我假设代码在异步回调能够检索数据之前结束)。我在这里遵循官方文档。我肯定错过了什么。你能帮我吗?以下是引用该问题的代码部分:
"use strict";
const Alexa = require("alexa-sdk");
var constants = require('./constants');
...
...
...
let readDynamoItem = function(callback) {
// callback("if uncommented I send this successfully");
const AWS = require("aws-sdk");
let params = {
Key: {
"topic": {
S: "car"
},
"element": {
S: "ford"
}
},
TableName: "brands"
};
var docClient = new AWS.DynamoDB.DocumentClient();
docClient.get(params, function(err, data) {
// callback("if uncommented I never see this");// never reached
if (err) {
callback("response with err");// never reached
} else {
callback("response with data");// never reached
}
});
};
const guessAttemptHandlers = {
'Correct': function(guess) {
...
if (left === 0) {
...
readDynamoItem.call(this, (function(result) {
this.response.speak("Tmp result is " + JSON.stringify(result));
this.response.listen("Please say yes, no or stop.");
this.emit(":responseReady");
}).bind(this));
} else {
...
}
}
};
exports.handler = function (event, context, callback) {
if (constants.debugMode) {
console.log("====================");
console.log("REQUEST: " + JSON.stringify(event));
console.log("====================");
}
let alexa = Alexa.handler(event, context);
alexa.appId = constants.appId;
alexa.registerHandlers(newSessionHandlers, startGameHandlers, guessModeHandlers, guessAttemptHandlers);
alexa.execute();
};
我还查看了CloudWatch日志,但没有任何问题或错误。我只是得到一个结束会议的回复,这不是我的目标 谢谢。
答案 0 :(得分:2)
默认情况下,lambda函数将在3秒内超时。您可以在CloudWatch日志中检查持续时间的值,以确认这是否真的是在dyanamodb调用之前结束的lambda的情况。
Alexa的请求会在10秒后超时,因此您可以尝试从aws控制台增加lambda函数的超时时间,并检查它是否能解决您的问题。