Node.js NodeJS Lambda调用错误:无法字符串化响应正文

Node.js NodeJS Lambda调用错误:无法字符串化响应正文,node.js,aws-lambda,callback,Node.js,Aws Lambda,Callback,创建了一个Lambda函数以从AWS Textract API获取分析。以下是相关代码(Node.js 12) 在CloudWatch日志中,获取以下错误: ERROR Invoke Error { "errorType": "Error", "errorMessage": "Unable to stringify response body", "stack"

创建了一个Lambda函数以从AWS Textract API获取分析。以下是相关代码(Node.js 12)

在CloudWatch日志中,获取以下错误:

ERROR   Invoke Error    
{
    "errorType": "Error",
    "errorMessage": "Unable to stringify response body",
    "stack": [
        "Error: Unable to stringify response body",
        "    at _trySerializeResponse (/var/runtime/RAPIDClient.js:175:11)",
        "    at RAPIDClient.postInvocationResponse (/var/runtime/RAPIDClient.js:45:22)",
        "    at complete (/var/runtime/CallbackContext.js:33:12)",
        "    at callback (/var/runtime/CallbackContext.js:43:7)",
        "    at /var/runtime/CallbackContext.js:104:16",
        "    at Runtime.exports.handler (/var/task/index.js:92:5)",
        "    at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)"
    ]
}

修改回调时:回调(null,request.X)。。。lambda从Textract返回数据对象。起初我认为我必须深入到数据对象(request.DocumentMetadata)。。。但是可以处理我在“request”前面输入的任何字符串(至少是我尝试过的那些)。非常感谢您的帮助。

我之所以使用上述方法,是因为我密切关注AWS SDK API文档。然而,我发现了另一种方法,它解决了所有问题(很多)。也许有人能解释原因

这是解决办法

let results = await textract.getDocumentAnalysis(params, (err, data) => {
    if(err) console.log(err, err.stack);
    else console.log(data);
}).promise();

callback(null, results);
答案与aws skd(适用于js)有关。以下是网址:

对于任何异步请求(认为所有或大部分AWS api请求都是异步的),您需要一个承诺……然后。有了AWS的要求,你需要一个“有能力”的承诺。。。因此,在请求的末尾添加:promise()

直接从AWS文档中可以看出,这可能有点神秘,我认为:

var request = s3.putObject({Bucket: 'bucket', Key: 'key'});
var result = request.promise();
result.then(function(data) { ... }, function(error) { ... });
如果我这样写上面的话:

async function(){
  const params = {Bucket: 'bucket', Key: 'key'};
  await s3.putObject(params, (err, data) => {
    if (err) function(err){ ... }; 
    else function(data) { ... };
  }).promise();
};

对AWS SDK上的函数的调用,例如,我在使用AWS。Rekognion总是希望得到承诺。@Mark。就连我也面临着同样的问题。我正在从Aurora DB中获取如下数据:
const data=await rdsDataService.executeStatement(params,(err,res)=>{if(err)console.log(err.stack);else console.log(res)}.promise();回调(空,数据)
。但是它开始给出错误
4fdb13任务在6.01秒后超时“
。如果我删除了promise(),那么它也没有任何区别。超时错误仍然存在。您能帮忙吗?
async function(){
  const params = {Bucket: 'bucket', Key: 'key'};
  await s3.putObject(params, (err, data) => {
    if (err) function(err){ ... }; 
    else function(data) { ... };
  }).promise();
};