我在lambda函数中调用以下函数,该函数使用回调调用另一个函数。在回调内部,响应对象似乎没有得到正确处理,因为它在alexa模拟器中给出了响应无效错误。功能看起来像
function handleFirstEventRequest(intent, session, response) {
var repromptText = "With History Buff, you can get historical events for any day of the year. For example, you could say today, or August thirtieth. Now, which day do you want?";
var sessionAttributes = {};
var cardContent = "";
var cardTitle = "Events on ";
//response.tell("There is an issue here vik");
getJsonEventsFromWikipedia(function (events) {
var speechText = "";
sessionAttributes.text = events;
session.attributes = sessionAttributes;
if (events.length == 0) {
speechText = "There is a problem connecting to Wikipedia at this time. Please try again later.";
cardContent = speechText;
response.tell(speechText);
} else{
console.log("vik::::::::::::: wikipedia response received");
console.log("values are:" + events);
var speechOutput = {
speech: "hi how are you",
type: AlexaSkill.speechOutputType.PLAIN_TEXT
};
var repromptOutput = {
speech: "hi how are you",
type: AlexaSkill.speechOutputType.PLAIN_TEXT
};
console.log("before response");
response.ask(speechOutput, repromptOutput);
console.log("after response");
}
});
}
但是,getJsonEventsFromWikipedia响应之外的工作完全正常。我不确定这里出了什么问题。 lambda函数日志显示没有错误等
答案 0 :(得分:0)
可能性是您的回复无效。当你在模拟器中调用它时,你会看到什么JSON回来?你没有说明以上内容。当您调用它时,Lambda日志中会出现什么?你也没有表明这一点。您是否尝试使用SessionStart事件测试lambda函数?我想如果您尝试这些,您应该能够在代码或设置中找到错误。
答案 1 :(得分:0)
没有完整的背景很难分辨。但假设您以非常不寻常的方式使用alexa技能,最可能的原因是:
getJsonEventsFromWikipedia是异步的。您的函数在执行回调之前成功退出,并且Lambda回调函数由代码中的某个其他路径调用,或者在Lambda条目函数返回之前根本不调用。解决方案是等待你的getJsonEventsFromWikipedia调用响应,并在确定你已经处理完之后退出你的函数。