放大 DataStore 查询:多次触发集线器就绪事件

Posted

技术标签:

【中文标题】放大 DataStore 查询:多次触发集线器就绪事件【英文标题】:Amplify DataStore query: Hub ready event triggered multiple times 【发布时间】:2021-09-13 17:53:44 【问题描述】:

我正在将 Amplify DataStore 与 Vue 应用程序一起使用。

除了我调用 clear() 和 start() 并使用 Hub 侦听 ready 事件之外,一切都按预期工作。

在启动应用程序时,我会做一些事情,然后更新 syncExpression 以配置 DataStore。然后我打电话:

DataStore.clear()
DataStore.start()

重新同步。

一旦商店准备就绪,就会触发中心事件。然后我提出这样的查询请求:

const result = await DataStore.query(Merchant, merchantId)

返回正确的数据。

但是,如果我发出另一个查询请求(使用不同的商家 ID),在调用 clear() 和 start() 之后,会触发两次集线器就绪事件。对于每个后续查询都会发生这种情况 - 会逐步触发 ready 事件(在清除和启动存储之后)。

所以这里是一个总结:

启动应用程序 重新配置同步表达式 清除并开始 就绪时触发集线器就绪事件(触发 1) 通过merchantId = 1进行查询 merchantId = 1 的返回结果

那么对于下一个查询:

重新配置同步表达式 清除并开始 就绪时触发集线器就绪事件(触发 1) 通过merchantId = 2进行查询 就绪时触发集线器就绪事件(触发 2) merchantId = 1 的返回结果 merchantId = 2 的返回结果

下一个查询:

重新配置同步表达式 清除并开始 就绪时触发集线器就绪事件(触发 1) 通过merchantId = 3进行查询 就绪时触发集线器就绪事件(触发 2) 就绪时触发集线器就绪事件(触发 3) merchantId = 1 的返回结果 merchantId = 2 的返回结果 merchantId = 3 的返回结果

下次就绪事件将被触发 4 次 等等……

为什么要这样做,我怎样才能让它只为每个查询触发一次?

谢谢

【问题讨论】:

【参考方案1】:

我仍在解决数据存储使用中的问题,因此我没有完整的答案。 我确实有一个建议,那就是将对Datastore.clear 的调用改为DataStore.stop。您无法在 Datastore 运行时更改同步表达式,因此您可以在更改同步表达式后将其停止并重新启动。这样您就不会删除所有以前同步的本地数据。

【讨论】:

嗨@julie,感谢您的回答。我的问题是我必须清除数据库,但我认为我必须首先停止它 - 我不确定 clear 是否真的停止然后清除,将对此进行调查。再次感谢

以上是关于放大 DataStore 查询:多次触发集线器就绪事件的主要内容,如果未能解决你的问题,请参考以下文章

如何在单个 API 调用中多次使用相同的 GraphQL 查询。放大,DynamoDB

中继器集线器网桥交换机各个组件作用(转))

谷歌Pixel再放大招,Android P准备就绪

因特网中最重要的5种硬件

linux第五周微职位

物理层