我的alexa应用程序有问题。我对NodeJS和Alexa相当陌生,
这是我的问题。我有一个包含数组的dynamodb。从该数组中,我将从一个可以为我提供JSON数据的其他网站获取所有值。我将这些数据传递给模板,最后调用alexa say命令。
由于某些原因,除了说部分外,其他所有内容都运作良好。
我绝对希望您能阐明我所缺少的内容。
这是代码:
app.intent('sayStockList', {
'utterances': ['{|say stock list}']
},
function(req, res) {
var stockInfoHelper = new StockInfoDataHelper();
var currentUserId = req.userId;
databaseHelper.readCodeList(currentUserId).then(function(currentJsonData) {
var currentData = [];
var toSay = '';
console.log("1) Current Data= %j", currentJsonData);
if (undefined === currentJsonData) {
toSay = 'You don\'t have any code stored. To store a code say: Alexa, add code.';
} else {
currentData = currentJsonData['data'];
return Promise.all(currentData.map(fn)).then(function(returnString) { //fn all return correctly
console.log("2) Promise return : %s", returnString);
res.say(returnString.toString()).shouldEndSession(false).send();
}).catch(function(err) {
console.log("3) Error: %s", err);
});
}
}); // Promise readCodeList then end
console.log("4) TEST 12 ");
return true;
}
);// end app intent
这是日志输出:
4) TEST 12
1) Current Data= {"data":["data1","data2"],"userId":"xxxxxx"}
Function getDataValue
Function getDataValue
2) Promise return : Return value for data1. Return value for data2
谢谢你的帮助!
伊恩·雷米
最佳答案
在了解...app.intent
回调应返回<promise>
,而不是true
You don\'t have any code stored ...
消息不应该挂起
...下面的重写更有意义:
app.intent('sayStockList', {
'utterances': ['{|say stock list}']
}, function(req, res) {
return databaseHelper.readCodeList(req.userId)
// ^^^^^^
.then(function(currentJsonData) {
console.log("1) Current Data= %j", currentJsonData || null);
if (!currentJsonData || !currentJsonData.data || currentJsonData.data.length === 0) { // better safety
return 'You don\'t have any code stored. To store a code say: Alexa, add code.';
// ^^^^^^
} else {
return Promise.all(currentJsonData.data.map(fn))
.then(function(results) {
console.log("2) Promise return : %s", results.toString());
return results.toString();
// ^^^^^^
});
}
})
.then(function(sayString) { // `sayString` is either the results or the `'You don\'t have any code stored. ...'` message.
res.say(sayString).shouldEndSession(false).send();
})
.catch(function(err) {
console.log("3) Error: %s", err);
res.say('Sorry, something went wrong').shouldEndSession(false).send(); // keep user informed.
});
}); // end app intent
关于node.js - Alexa 说不能与 promise ,休息和dynamodb组合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49246914/