我正在尝试从mongo db获取值,并在alexa仿真器的答复中填充获取的值。
使用的alexa sdk版本是最新的v2.0,ask-sdk。
使用alexa-skill-local和lambda函数进行了测试。
下面的return语句按预期工作
return handlerInput.responseBuilder
.speak("test")
.reprompt("test")
.withSimpleCard('Innovation details', "test")
.getResponse();
具有上述return语句的结果如下所示
{
"body": {
"version": "1.0",
"response": {
"outputSpeech": {
"type": "SSML",
"ssml": "<speak>test</speak>"
},
"card": {
"type": "Simple",
"title": "Innovation details",
"content": "test"
},
"reprompt": {
"outputSpeech": {
"type": "SSML",
"ssml": "<speak>test</speak>"
}
},
"shouldEndSession": false
},
"sessionAttributes": {},
"userAgent": "ask-node/2.3.0 Node/v8.12.0"
}
}
我编写了一个函数ops(),它将从云图集中托管的mongodb中检索值。检索到的字符串将用作语音文本和提示文本。但是由于javascript是异步的,并且涉及到猫鼬调用,所以我尝试编写async / await函数,回调地狱,最后保证函数返回db值。 db调用位于promise对象内部,return语句位于.then()内部,如下所示。使用alexa-skill-local运行时,控制台语句在控制台中填充正确的结果,并且控制台中未报告任何错误。通过lambda函数运行也不会产生任何错误。
ops(handlerInput).then(function(data){
console.log("in promise then "+data.speechText);
var handlerInput=data.input;
return handlerInput.responseBuilder
.speak(data.speechText)
.reprompt(data.speechText)
.withSimpleCard('Innovation details', data.speechText)
.getResponse();
}) .catch(error => console.log(error));
传递的解析对象为:
var passer={
"input": handlerInput,
"speechText":speechText
};
使用alexa-skill-local时,控制台语句按预期运行,但return语句未向alexa仿真器返回值。返回的JSON为
{
"body": {
"version": "1.0",
"response": {},
"sessionAttributes": {},
"userAgent": "ask-node/2.3.0 Node/v8.12.0"
}
}
请帮助我将值返回给Alexa模拟器
答案 0 :(得分:0)
感谢您的回复。这些答复帮助我确定了解决方案。
我在promise对象的前面放了一个收益。现在,意图处理程序正在返回Promise对象。