AWS Amplify DataStore配置syncExpression跳过指定模型同步
结论
你写的这段代码无法实现跳过指定模型同步的需求。
问题原因
- 按照Amplify DataStore的规则,
syncExpression回调返回null时,代表不对对应模型设置任何同步过滤条件,会拉取该模型在云端的全量数据,和你想要排除同步的目标完全相反。 - 你写的
DataStore.configure后调用DataStore.clear()清空本地数据、再调用DataStore.start()重启同步的流程是正确的,配置更新后必须走这个流程才能让新的同步规则生效,问题只出在排除模型的表达式写法上。
修正方案
要完全阻止指定模型和云端同步,需要给对应模型返回一个永远不成立的查询谓词,让云端不会返回任何该模型的数据,即可实现跳过同步的效果。修正后的代码如下:
const userSyncData = async (number) => { DataStore.configure({ syncExpressions: [ syncExpression(Test, () => { return test => test.phoneNumber('eq', number); }), // 匹配一个永远不存在的id,拉取不到任何数据,等同于跳过该模型同步 syncExpression(ExternalTest, () => { return model => model.id('eq', 'NEVER_SYNC_PLACEHOLDER_ID'); }), syncExpression(EmployeeTestCounter, () => { return model => model.id('eq', 'NEVER_SYNC_PLACEHOLDER_ID'); }), syncExpression(EmployeeBarCodes, () => { return model => model.id('eq', 'NEVER_SYNC_PLACEHOLDER_ID'); }), syncExpression(TestConsent, () => { return model => model.id('eq', 'NEVER_SYNC_PLACEHOLDER_ID'); }), ], }); await DataStore.clear(); await DataStore.start(); };
注意事项
- 不要直接在
syncExpression回调里返回false,必须返回符合DataStore谓词语法的查询条件,直接返回布尔值会触发运行时错误。 - 如果后续需要恢复这几个模型的同步,只需要删除对应模型的
syncExpression配置,再重新执行一次clear()+start()流程,即可重新拉取对应模型的全量云端数据。
内容的提问来源于stack exchange,提问作者hamzaahzam
相关产品推荐
相关产品推荐

