[英]Use Dynasty DynamoDB Query in Alexa Response
我在運行於AWS Lambda的Nodejs Alexa Skill Service中使用了Dynasty ,以查詢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();
}
};
用於NodeJS v2的Alexa SDK支持處理程序中的promise 。
因此,從您的處理程序中,您會返回一個Dynasty承諾,該承諾與Dynasty查詢諾言鏈接在一起。
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(..)
}
});
});
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.