Lamba函数在DynamoDB以Alexa技能结束之前结束

时间:2018-04-01 23:20:26

标签: node.js aws-lambda amazon-dynamodb alexa alexa-skill

我在DynamoDB客户端遇到一个小问题。我正在开发一种需要从DynamoDB表中获取一些数据的技能。表和数据都在那里。由于某种原因,我无法触发调用(我假设代码在异步回调能够检索数据之前结束)。我在这里遵循官方文档。我肯定错过了什么。你能帮我吗?以下是引用该问题的代码部分:

"use strict";

const Alexa = require("alexa-sdk");
var constants = require('./constants');

...
...
...

let readDynamoItem = function(callback) {
    // callback("if uncommented I send this successfully");
    const AWS = require("aws-sdk");
    let params = {
        Key: {
            "topic": {
                S: "car"
            }, 
            "element": {
                S: "ford"
            }
        }, 
        TableName: "brands"
    };

    var docClient = new AWS.DynamoDB.DocumentClient();
    docClient.get(params, function(err, data) {
        // callback("if uncommented I never see this");// never reached
        if (err) {
            callback("response with err");// never reached
        } else {
            callback("response with data");// never reached
        }
    });
};

const guessAttemptHandlers = {
    'Correct': function(guess) {
        ...
        if (left === 0) {
            ...
            readDynamoItem.call(this, (function(result) {
                this.response.speak("Tmp result is " + JSON.stringify(result));
                this.response.listen("Please say yes, no or stop.");
                this.emit(":responseReady"); 
            }).bind(this));
        } else {
            ...
        }
    }
};

exports.handler = function (event, context, callback) {
    if (constants.debugMode) {
        console.log("====================");
        console.log("REQUEST: " + JSON.stringify(event));
        console.log("====================");
    }

    let alexa = Alexa.handler(event, context);
    alexa.appId = constants.appId;
    alexa.registerHandlers(newSessionHandlers, startGameHandlers, guessModeHandlers, guessAttemptHandlers);
    alexa.execute();
};

我还查看了CloudWatch日志,但没有任何问题或错误。我只是得到一个结束会议的回复,这不是我的目标 谢谢。

1 个答案:

答案 0 :(得分:2)

默认情况下,lambda函数将在3秒内超时。您可以在CloudWatch日志中检查持续时间的值,以确认这是否真的是在dyanamodb调用之前结束的lambda的情况。

Alexa的请求会在10秒后超时,因此您可以尝试从aws控制台增加lambda函数的超时时间,并检查它是否能解决您的问题。