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

时间:2015-07-25 15:13:02

标签: 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);
    // ...
});
});
};

5 个答案:

答案 0 :(得分:52)

查看您的内存消耗(包含在上一个日志行中)。当我为lambda函数分配的内存太少时,我得到了同样的信息。

答案 1 :(得分:51)

消息“在完成请求之前退出流程”表示在调用context.done(或context.succeed等)之前退出Javascript功能。通常,这意味着代码中存在一些错误。

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

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

答案 2 :(得分:5)

我使用的是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  

当lambda执行完成请求时,
没有打电话给上述回调之一,
你会看到以下错误:

  

“在完成请求之前退出流程。”

答案 3 :(得分:1)

代码出错。删除最后});并且不使用上下文来实现向后兼容,在node.js 4.3和6.1运行时使用回调。

答案 4 :(得分:0)

也许您未遵循使用该功能的AWS lamda标准 检查此Golang代码。

package main
import "github.com/aws/aws-lambda-go/lambda"

func main() {
   lambda.Start(yourFunction)
}

func yourFunction(){
   // do your stuff
}