node.js - 使用适用于 Java 的 AWS 开发工具包调用 AWS Lambda 函数时如何检索 context.done() 消息?

标签 node.js amazon-web-services aws-sdk aws-lambda

我正在使用AWS SDK for Java调用一些AWS Lambda之前已经上传的功能。 invokeAsync方法返回 invokeAsyncResult对象,它似乎只包含非常有限的一组属性和方法。特别是,对象中包含的唯一相关信息是 HTTP 状态代码(例如,202 表示成功)。似乎没有任何用于检索提供给 Lambda Node.js context.done() 方法的错误代码或消息的方法属性。

因此,无法直接从 Lambda 函数调用中获取任何“返回值”。我必须让 Lambda 处理程序将一个对象放入 S3 以存储返回值的 JSON 表示形式,然后使用 Java SDK 代码在消费者端获取该对象的内容。

有人知道如何直接从 Lambda 函数获取一些有意义的“返回值”吗?

最佳答案

在您的代码中,您可以查看 lambda 调用的结果:

lambda.invoke(params, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else {
        console.log(data);           // successful response
        if (data.Payload != '{}') {
            var jdata = JSON.parse(data.Payload);
            console.log(jdata.something);
            successCallback(jdata);
        }
        else successCallback(null);
    }
}); 

在您的 Lambda 函数中,您可以使用如下内容:

dynamodb.getItem(params, function(err, data) {
   if (err) {
      console.log(err);
      context.fail(err);
   } else {
      console.log(data);
      context.succeed(data);
   }
}

您还可以将 context.succeed() 替换为 context.done() context.succeed(null, 数据);

在我描述的情况下,data.Payload 将是从 DynamoDB 检索的 JSON 字符串。

关于node.js - 使用适用于 Java 的 AWS 开发工具包调用 AWS Lambda 函数时如何检索 context.done() 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28490958/

相关文章:

.net - 未配置 RegionEndpoint 或 ServiceURL

node.js - 为什么 heroku 会终止我的进程,状态为 143?

html - Node JS 服务 html 文件与 css

javascript - 如何用 Jest 测试 ASYNC 请求的顺序

java - 有什么方法可以在不抛出异常的情况下在 AWS Lambda for Java 中发出错误信号?

ubuntu - 连接到托管 Chef 的 Cloudformation 片段

objective-c - 扩展无法在运行时访问通用参数

node.js - 对象存在于 Node.JS 的 AWS S3 存储桶中

ruby-on-rails - Rails 上传到 AWS 创建 .zip.cpgz 文件循环

node.js - 在nodejs中从stdin读取的正确方法