DynamoDB成功返回但不存储数据

时间:2017-02-27 11:13:08

标签: javascript amazon-web-services amazon-dynamodb bluebird

情况是我想在DynamoDB数据库中存储一些信息,然后如果我确定此信息已成功存储,则仅发送通知。这是我的代码的样子:

const putObj = Bluebird.promisify(docClient.put, { context: docClient })

// ... a promise chain collecting information...
            const params = {
              TableName: 'my_table',
              Item: {
                name: itemName
              }
            }
            return putObj(params)
              .then((data) => {
                if (Ramda.equals(data, {})) {
                  // ... send notification here
              .catch((err) => {
                throw err
              })

我假设如果存储数据时出错,则会在catch块中捕获,并且不会发送通知。但是,在某些情况下,我发现即使相应的信息尚未存储在数据库中,也会发送通知。这种情况很少发生 - 几乎在所有情况下,代码都可以根据需要发挥作用。

关于为什么/如何发生这种情况的任何想法,以及我可以做些什么来阻止它。 DynamoDB不会向.then返回任何有用的信息 - 如果成功,它只是一个空对象,我已经在发送通知之前检查了这一点。

1 个答案:

答案 0 :(得分:3)

您使用的是“最终一致”还是“强烈一致”的读物?

  

当您从DynamoDB表中读取数据时,响应可能不会   反映最近完成的写操作的结果。该   响应可能包括一些陈旧的数据。如果你重复阅读   请求在短时间后,响应应该返回最新的   数据

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadConsistency.html

您可能需要重试读取,否则请更改读取一致性值。