带有deleteMessageBatch的AWS-SDK问题,告诉我MissingParameter但我不是

时间:2018-11-29 22:45:35

标签: aws-sdk amazon-sqs

我收到以下消息

UnhandledPromiseRejectionWarning:MissingParameter:请求必须包含参数DeleteMessageBatchRequestEntry.1.Id。

我想我正在将文档放在AWS-SDK/SQST

我正在使用此代码

var params = {
          Entries: _.map(_.uniqWith(data.Messages,d=>d.MessageId),d=>({
            Id: d.MessageId,
            ReceiptHandle: d.ReceiptHandle
          })),
          QueueUrl: xx.QueueUrl
        };
await sqs.deleteMessageBatch(params).promise();

这是发送时参数的样子;如果您问我的话,看起来就像是文档...

{ 
    Entries: [
      {
        Id: "83ba1e18-someid", 
        ReceiptHandle: "AQEB79CDI1Q+blablabla"
      }
    ]
    QueueUrl: "https://sqs.us-west-2.amazonaws.com/somequeeuurl"
}

我的系统:

aws-sdk: "^2.354.0",
MacOS - current
node 8.12.0

2 个答案:

答案 0 :(得分:1)

<块引用>

UnhandledPromiseRejectionWarning: MissingParameter: 请求必须包含参数 DeleteMessageBatchRequestEntry.1.Id。

我只是花了很长时间查看此错误并调试我的代码。我最终发现的是,它似乎试图说明请求中至少需要一个 DeleteMessageBatchRequestEntry 元素——不能是 0。当我重构我们的代码并添加一个检查时确保如果列表中没有条目我们不会发出请求,这个问题就消失了。

您是否有可能在某些情况下实际发送以下内容?

{ 
    Entries: []
    QueueUrl: "https://sqs.us-west-2.amazonaws.com/somequeeuurl"
}

答案 1 :(得分:0)

documentation实际上指定输入应具有编号映射,而不是Entries的数组。

{ 
    Entries: {
        1 : {
            Id: "83ba1e18-someid", 
            ReceiptHandle: "AQEB79CDI1Q+blablabla"
        },
        2 : {
            Id: "c0ffeeba11ad-someid", 
            ReceiptHandle: "cdgjiib4674"
        }
    }
   QueueUrl: "https://sqs.us-west-2.amazonaws.com/somequeeuurl"
}