我正在尝试调用 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);
// ...
});
});
};
答案 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
}