【问题标题】:Add information into DynamoDB using Alexa Lambda function使用 Alexa Lambda 函数将信息添加到 DynamoDB
【发布时间】:2017-09-05 04:08:50
【问题描述】:

我已经被这个代码卡住了大约一天了。

我只是想通过使用 Alexa 的启动请求将信息添加到 DynamoDB。

我收到以下错误代码:

"errorMessage": "RequestId: f96ae2cb-1dbf-11e7-a267-b7cf2f2c95a0 进程在完成请求前退出"

信息实际上已插入到 DynamoDB 中,但由于错误,我无法向程序添加更多功能。

据我了解,可能是回调有问题。

我尝试了许多不同的方法来“回调”或返回某些内容,但我还没有弄清楚如何避免错误。

如果我取消注释 this.emit(':tell', "Hello, inserting Apples into DynamoDB");,错误就会消失,但不会插入任何信息。

我做错了什么,我该如何解决?

下面是我的代码;

'use strict';
var Alexa = require('alexa-sdk');
const doc = require('dynamodb-doc');
const dynamo = new doc.DynamoDB();

exports.handler = function(event, context, callback) {
  var alexa = Alexa.handler(event, context);
  alexa.registerHandlers(handlers);
  alexa.execute();
};

var handlers = {
  'LaunchRequest': function(event, context, callback) {
    // this.emit(':tell', "Hello, inserting Apples into DynamoDB");
    var params = {
      Item: {
        date: Date.now(),
        message: "Apples"
      },
      TableName: '_yourTableName'
    };
    dynamo.putItem(params, function(err, data) {
      if (err) {
        callback(err, null);
      } else {
        callback(null, data);
      }
    });
    context.done();
  }
};

【问题讨论】:

  • 您的 Lambda 函数可能在 PutItem 请求完成之前退出。你需要让你的函数一直运行直到你的任务完成,然后调用context.done()。见:Everything Depends on Context or, The Fine Art of nodejs Coding in AWS Lambda
  • 感谢您的回复。我检查了链接并添加了 context.done()。当我将语句放在 dynamo.putItem 函数之外时,我现在收到错误“errorMessage”:“无法读取未定义的属性‘完成’”。如果我将 context.done() 直接放在 else 语句之后,我会得到同样的错误。
  • 抱歉,我不知道context 的更多细节——只是很多人(包括我自己)都遇到过这个问题,所以我想提一下。
  • 别担心,感谢您的建议!
  • 你找到解决办法了吗?

标签: amazon-web-services aws-lambda amazon-dynamodb alexa alexa-skills-kit


【解决方案1】:

这是因为您正在向 Dynamodb 添加值,这是一个回调但 context.done();写在回调之外。在 dynamoDb 完成操作之前,它会调用 context.done();因此它将退出进程

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 2020-05-23
    • 2016-12-17
    • 2019-07-28
    • 2019-04-17
    • 2021-07-14
    相关资源
    最近更新 更多