【发布时间】:2018-09-13 17:50:44
【问题描述】:
我是 Node.js 和 Javascript 的新手,我正在使用 Lambda 函数和 DynamoDB 开发一个 Alexa 应用程序。
我在 DynamoDB 中有一个名为:Chat 的表
使用 PrimaryKey:“Said”和“say”列。每当启动 Alexa 技能时,我只想根据用户所说的内容获取记录并返回。所以它基本上是一个关于主键的查询,它工作正常。
但是,我没有从语音输出变量中的 lambda 函数得到任何响应,因为 API 不会等待响应生成器完成对 DynamoDB 的异步调用并返回空响应。
有没有办法强制在发送响应之前解析异步调用?
const WelcomeMessage = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return request.type === 'LaunchRequest' ||
(request.type === 'IntentRequest');
},
handle(handlerInput) {
var ans;
var AWS = require('aws-sdk');
// Set the region
AWS.config.update({
region: 'us-east-1'
});
// Create the DynamoDB service object
var dynamodb = new AWS.DynamoDB();
var params = {
TableName: 'chat',
Key: {
'said': {
S: 'Hi Sir' + ''
}
},
ProjectionExpression: 'say'
};
dynamodb.getItem(params, function(err, data) {
if (err) {
console.log(err, err.stack);
} else {
if (data) {
return handlerInput.responseBuilder
.speak(data.Item.say.S + '')
.getResponse();
} else {
ans = 'You dint train me for that!';
return handlerInput.responseBuilder
.speak(ans)
.getResponse();
}
}
});
}
};
错误的输出:
【问题讨论】:
-
你能
console.log(data)吗?从技术上讲这是正确的,aws-sdk似乎仍然不支持开箱即用的承诺,但你确实有回调。所以我的猜测是它实际上确实在等待响应,但响应可能只是格式错误。
标签: javascript alexa alexa-skills-kit alexa-skill alexa-app