AWS Lambda"在完成请求之前退出流程"

Rup*_*ert 55 amazon-web-services aws-lambda

我试图调用DynamoDB客户端方法并从DynamoDB表中获取一个项目.我正在使用AWS Lambda.但是,我一直收到消息:

"在完成请求之前退出流程."

我已经增加了超时以确保,但处理时间小于超时.有什么建议?

console.log('Loading event');
var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});

exports.handler = function(event, context) {
dynamodb.listTables(function(err, data) {
});

var params = {
    "TableName": "User",
     "Key":
        {"User Id"   : {"S":event.objectId}
    },
    "AttributesToGet"   : ["First Name","Last Name", "Latitude", "Longitude"],
    "ConsistentRead"    : true
  }


   dynamodb.getItem(params, function(response,result) {
    response.on('data', function(chunk){
    console.log(""+chunk);
    console.log("test1")
    context.done(result);
});
result.on('ready', function(data){
    console.log("test2")
    console.log("Error:" + data.error);
    console.log("ConsumedCapacityUnits:" + data.ConsumedCapacityUnits);
     context.done('Error',data);
    // ...
});
});
};
Run Code Online (Sandbox Code Playgroud)

lin*_*nqu 55

看一下你的内存消耗(包含在上一个日志行中).当我为lambda函数分配的内存太少时,我收到了相同的消息.

  • 虽然最佳答案在技术上是正确的,但增加我的内存消耗使我能够调试cloudwatch中的错误.使用之前的内存级别,该功能将在达到stackoverflow之前结束,而云监视将无法提供帮助.增加记忆后,我终于能够发现我精心制作的无限循环.:d (3认同)

gar*_*aat 51

消息"在完成请求之前退出进程"意味着在调用context.done(或context.succeed等)之前退出Javascript函数.通常,这意味着您的代码中存在一些错误.

我不是一个Javascript专家(根本没有)所以可能有更优雅的方法来查找错误,但我的方法是console.log在我的代码中放入一堆消息,运行它,然后查看日志.我通常可以对违规线进行归零,如果我看得太久,我通常可以弄清楚我的错误.

我看到你已经有了一些日志记录.你在输出中看到了什么?

  • 请注意,它是`context.succeed`,而不是`success`.(我试着编辑答案,但它不会让我,因为我的变化太短了.) (7认同)
  • 谢谢它非常有用,只是不使用`console.log`,或者另外,你可以查看cloudwatch中的日志,显示错误可以节省大量时间 (4认同)

Man*_*ddy 6

我用过callback,而不是context.
关于aws网站使用的最新例子callback而不是context.

要完成请求,必须调用以下任一项:

callback(error);         // This is used when there is an error
// or
callback(null, data);    // This is used when there is a success
                         // 'data' will contain success result, like some JSON object  
Run Code Online (Sandbox Code Playgroud)

当lambda执行完成请求时,
如果未能调用上述回调之一,
您将看到以下错误:

"在完成请求之前退出流程."