在 Alexa 响应中使用 Dynasty DynamoDB 查询



我在我的 Nodejs Alexa 技能服务中使用 Dynasty,运行在 AWS Lambda 上,查询 DynamoDB。由于 API 的结构,我无法在我的 Alexa 响应中使用查询结果。在下面的代码中,传递给"then"的回调在处理程序返回后运行,因此永远不会分配"name"。如何在响应中使用查询回调中获取的信息?

const dynasty = require('dynasty')(credentials);
const myIntentHandler = {
canHandle(input) {
return input.requestEnvelope.request.intent.name === 'MyIntent';
},
handle(input) {
const userId = input.requestEnvelope.session.user.userId;
const users = dynasty.table('user');
var name;
users.find(userId).then(function(user) {
if(user) {
name = user.name;
} else {
...
}
});
return input.responseBuilder.speak('Hello ' + name).getResponse();
}
};

Alexa SDK for NodeJS v2 支持处理程序中的 promise。

因此,从您的处理程序中,您返回一个承诺,与王朝查询承诺相关联。

const dynasty = require('dynasty')(credentials);
const myIntentHandler = {
canHandle(input) {
return input.requestEnvelope.request.intent.name === 'MyIntent';
},
handle(input) {
const userId = input.requestEnvelope.session.user.userId;
const users = dynasty.table('user');
var name;
return new Promise((resolve, reject) => {
users.find(userId).then(function(user) {
if(user) {
name = user.name;
let response 
= input.responseBuilder
.speak('Hello ' + name)
.getResponse();
resolve(response);
} else {
...
// handle this case
//  and resolve(..) or reject(..)
}
});
});
}
};

最新更新