Создание навыка Alexa, который требует настойчивости.
Я звоню в базу данных, чтобы узнать подробности пользователя до управления потоком, и я пытаюсь заставить узел ждать ответ от DynamoDB (используя Dynasty.js для обработки соединения с БД).
Я испробовал целый ряд различных подходов "блокировка" / асинхронизация обещаний / обратных вызовов / узлов, и лучшее, что я могу сделать, - это отображать ответ (в журналах CloudWatch), когда пользователь выходит из навыка.Мне бы очень хотелось, чтобы конфигурация пользователя происходила в начале процесса, а не в конце!
var credentials = {
accessKeyId: process.env.MY_ACCESS_KEY_ID,
secretAccessKey: process.env.MY_SECRET_ACCESS_KEY
};
var dynasty = require('dynasty')(credentials);
var tableName = dynasty.table('dynamoTable');
const promiseFunc = new Promise((resolve,reject)=>{
var myUser = tableName.find(userId);
setTimeout(_=>{resolve(myUser)}, 2000);
});
var checkUser = async function(){
if (true) {
console.log('check, check, 1, 2, 3');
await promiseFunc.then(function(myUser) {
if (myUser) {
console.log("USER FOUND");
console.log(myUser);
} else {
console.log("no user! sigh deeply and start again");
}
})
}
console.log("do more stuff now");
}
exports.handler = function(event, context) {
userId = event.session.user.userId;
const alexa = Alexa.handler(event, context);
// only check the first time, and only once the userId is properly constructed
if (!(userId.startsWith('amzn1.ask.account.testUser')) && (checkedUser != 1)) {
checkedUser = 1;
checkUser();
}
alexa.resources = languageString;
alexa.registerHandlers(newSessionHandlers, startStateHandlers, triviaStateHandlers, helpStateHandlers, stopStateHandlers);
alexa.execute();
};
Как заставить узел ждать ответа от DynamoDB до запуска остальной части сценария ...