繁体   English   中英

AWS Amplify DataStore 有时间将新项目同步到后端以便在 Lambda 函数中访问它吗?

[英]AWS Amplify DataStore time to sync new item to backend so it is accessible in a Lambda function?

我的问题:

我正忙于使用 Amplify DataStore 开发 Vue Web 应用程序。

在 Web 应用程序中,当我将新项目保存到 DataStore 时,我无法使用 Lambda 函数和 AWS.DynamoDB.DocumentClient() 立即访问该项目以使用 await docClient.query(params).promise( ). 结果是空的。

如果我在保存项目后等待一两分钟,我就可以在我的 lambda 函数中访问该项目。

我假设将本地保存的项目同步到后端有延迟。

在新项目保存在 Web 应用程序中后,第三方会立即通过 API 调用 lambda 函数。

如何确保可以在我的 lambda 函数中访问该项目?

您应该在保存项目时等待 200 响应,然后从 DynamoDB 发出强一致性读取,这将确保它返回最新结果:

ConsistentRead: true

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

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#query-property

DynamoDB 在 leader/follower 架构上工作,所有写入都由 leader 持久化,然后复制到 followers(以毫秒为单位)。 您可能正在从关注者那里读取数据,因此得到一个空响应,而 DynamoDB 尚未复制该写入。 将 ConsistentRead 设置为 true 将强制读取发生在领导者身上,这将返回该项目,只要您的保存 API 已经返回 200。

找到了一个解决方案,我使用 DataStore.observe 来观察我保存的项目(模型)的变化 - msg.opType === 'INSERT' 在第一次保存时触发(在本地存储中)并且 msg.opType === ' UPDATE' 当项目写入后端 dynamoDb 表时。

此外,这些属性和值在更新中返回

              "createdAt": "2022-12-23T13:23:57.978Z",
              "updatedAt": "2022-12-23T13:23:57.978Z",
              "owner": "test",
              "_version": 1,
              "_lastChangedAt": 1671801837996,
              "_deleted": null

而不是第一次保存。 因此,通过使用条件语句,我可以确保观察到的项目与我的匹配,然后我可以在知道数据在 dynamoDb 表中可用的情况下触发我的代码。

希望这可以帮助遇到与我类似问题的任何人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM