放大 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 查询:多次触发集线器就绪事件的主要内容,如果未能解决你的问题,请参考以下文章