lambda函数responde对象未被处理

时间:2016-07-26 05:19:28

标签: lambda aws-lambda alexa-skills-kit

我在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函数日志显示没有错误等

2 个答案:

答案 0 :(得分:0)

可能性是您的回复无效。当你在模拟器中调用它时,你会看到什么JSON回来?你没有说明以上内容。当您调用它时,Lambda日志中会出现什么?你也没有表明这一点。您是否尝试使用SessionStart事件测试lambda函数?我想如果您尝试这些,您应该能够在代码或设置中找到错误。

答案 1 :(得分:0)

没有完整的背景很难分辨。但假设您以非常不寻常的方式使用alexa技能,最可能的原因是:

getJsonEventsFromWikipedia是异步的。您的函数在执行回调之前成功退出,并且Lambda回调函数由代码中的某个其他路径调用,或者在Lambda条目函数返回之前根本不调用。解决方案是等待你的getJsonEventsFromWikipedia调用响应,并在确定你已经处理完之后退出你的函数。