【问题标题】:Lambda function ends before DynamoDB get ends in Alexa skillLambda 函数在 DynamoDB 结束 Alexa 技能之前结束
【发布时间】:2018-09-11 05:07:37
【问题描述】:

我在使用 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 日志,但没有任何问题或错误。我只是收到一个结束会话的响应,这不是我的目标。
谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我刚刚检查了我的超时时间,它设置为 7 秒。该函数最多在 2 或 3 秒后真正结束会话。有时甚至更快。
    • @VictorVelchev 你有没有想过这个问题?我也有同样的问题。
    • 我切换到 boto3 并解决了我的问题。
    猜你喜欢
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 2019-07-28
    • 2017-10-25
    • 2018-11-30
    • 1970-01-01
    相关资源
    最近更新 更多