问题可能是由于从离线模式转换为在线模式时,Amplify DataStore无法正确处理未处理的订阅更改而引起的。 以下是可能的解决方案。
1.在应用程序启动时,读取存储在本地的未处理的事件,并将其重新提交以获取当前数据。可以使用以下代码示例:
import { DataStore } from 'aws-amplify';
import { DataStoreEvents } from 'aws-amplify/lib-esm/API';
DataStoreEvents.onSync('datastore_subscription', ({ eventName, data }) => {
if (eventName === 'ready') {
DataStore.query(MyModel).then((data) => {
// Handle the returned data
console.log(data);
});
}
});
2.在订阅初始化后,使用以下代码示例手动重新订阅:
import { Hub } from 'aws-amplify';
import { DataStore } from 'aws-amplify';
import { DataStoreEvents } from 'aws-amplify/lib-esm/API';
DataStoreEvents.onSync('subscriptions', ({ eventName, data }) => {
if (eventName === 'ready') {
// Manually re-subscribe to all subscriptions
DataStore.start().then((subs) => {
subs.forEach((sub) => {
DataStore.observe(sub.model).subscribe(sub.observer);
});
});
}
});
以上是两种可能的解决方案,具体取决于情况和应用程序需求。