Идея в том, что когда пользователь открывает экран, он видит список групп. Группы хранятся в облаке Firebase.
Если есть подключение к Интернету, то проблем нет. Однако если я отключу интернет на эмуляторе, то работа с кешем становится совсем странной.
Что я делаю и что вижу::
- Я отключаю интернет
- Перехожу на другой экран приложения.
- Я возвращаюсь на экран с группами. Я ожидаю, что группы будут мгновенно загружены из кеша. Вместо этого я жду 10 секунд, прежде чем группы появятся.
- Я повторяю шаги 2–3, но на этот раз ожидание занимает около минуты. .
- Я повторяю шаги 2-3 еще раз, но на этот раз ожидание занимает около 8 минут.
- После очередного повторения я ждал около 5 минут.
Обратите внимание, что я специально задал использование кеша в .get({source: 'cache'}).
Код компонента:
Код: Выделить всё
const fetchGroups = async () => {
const grps = await firebaseConnector.getGroups();
try {
Alert.alert(`${grps.length}`);
} catch (error) {
Alert.alert('error');
}
setGroups([...grps]);
};
useFocusEffect(
useCallback(() => {
fetchGroups();
}, []),
);
Код: Выделить всё
async getGroups(): Promise {
try {
var groupsItems: GroupItem[] = [];
const grpsPartSnapshot = await firestore()
.collection('GroupParticipants')
.where('UserId', '==', this.userId)
.get({source: 'cache'});
const grpsIds = grpsPartSnapshot.docs.map(x => x.data().GroupId);
for (const grpIndex in grpsIds) {
var grpId = grpsIds[grpIndex];
var grpInfo = await firestore()
.collection('Groups')
.doc(grpId)
.get({source: 'cache'});
groupsItems.push({
id: grpInfo.id,
name: grpInfo.data()?.Name,
imageSource: grpInfo.data()?.Image,
});
}
return groupsItems;
} catch (error) {
console.error(error);
return [];
}
}
Заметил, что поведение меняется в зависимости от того, КАКОЙ экран я перехожу. Если я перехожу на пустой экран, группы появляются как положено, мгновенно из кеша.
Если я перехожу на скриншот, где отображается другая информация из Firestore (почему-то всегда без проблемы), то я наблюдаю поведение выше.
Подробнее здесь: https://stackoverflow.com/questions/787 ... huge-delay
Мобильная версия