Итак, я создал приложение, используя Ioni c и Firebase в качестве моего бэкенда. Когда приложение запускается в веб-браузере или на эмуляторе iOS, реакция очень быстрая, и приложение работает очень хорошо. Однако на iOS загрузка чего-либо в Firebase занимает вечность. Обратите внимание, что загрузка информации из Firebase довольно быстрая и простая. Загрузка, однако, создает проблему. Wi-Fi, на котором я тестирую это, очень быстрый. Кто-нибудь знает, почему это происходит?
Приложение было выпущено недавно, и это стало проблемой для многих моих пользователей, включая меня самого!
ОБНОВЛЕНИЕ: Итак, после дополнительных испытаний выясняется, что проблема конкретно с определенными функциями. Это методы .update () и .add ()
Каждый раз, когда я пытаюсь обновить поле в Firebase, это занимает вечность. Каждый раз, когда я пытаюсь добавить документ в коллекцию, это также занимает вечность. Почему это происходит? Вот некоторый код, который требует вечности:
async createDMChat(otherUID: string, otherName: string) {
let newDoc: DocumentReference = this.db.firestore.collection('dmchats').doc();
let docId: string = newDoc.id;
let chatsArray = this.dmChats.value;
let timestamp = Date.now();
chatsArray.push(docId);
//Adds to your dm chat
await this.db.collection('users').doc('dmchatinfo').collection('dmchatinfo').doc(this.dataService.uid.value).set({
chatsArray: chatsArray
});
//Adds to other person DM chat
//-------------------THIS IS THE PART THAT TAKES FOREVER-----------------------
//The .update() method is the problem as well as .add() to a collection
await this.db.collection('users').doc('dmchatinfo').collection('dmchatinfo').doc(otherUID).update({
chatsArray: firebase.firestore.FieldValue.arrayUnion(docId)
});
//Pull info on person's UID
let otherUserInfo = await this.db.firestore.collection('users').doc('user').collection('user').doc(otherUID).get();
let otherAvatar = otherUserInfo.data().avatar;
//Sets message in database
await newDoc.set({
chatName: otherName + " & " + this.dataService.user.value.name,
users: [otherUID, this.dataService.uid.value],
lastPosted: timestamp,
avatar1: this.dataService.avatarUrl.value,
avatar2: otherAvatar,
person1: otherName,
person2: this.dataService.user.value.name
});
await newDoc.collection('messages').doc('init').set({
init: 'init'
});
await this.dataService.storage.set(docId, timestamp);
}
В приведенном выше коде .update () - это метод, который занимает вечность. Кроме того, другие функции с методом .add (), добавляющие документы в коллекцию, работают вечно.
Опять-таки, ЭТИ МЕТОДЫ БЫСТРО НА ВЕБ-БРАУЗЕРАХ И ЭМУЛЯТОРАХ. Только не в мобильном приложении.
==================================== ============================================
НОВОЕ ОБНОВЛЕНИЕ: так кажется что проблема на самом деле в ожидании возвращения обещания. Я переписал все функции, которые больше не использовали add () или update (), а вместо этого использовали set () после создания нового документа с помощью do c () для замены add (). Затем я использовал set ({...}, {merge: true}) для замены update ().
На этот раз изменения на сервере были мгновенными, но проблема возникла при ожидании методов для вернуть обещание с сервера. Это та часть, которая сейчас вызывает отставание. Кто-нибудь знает, почему это происходит? Я мог бы просто изменить свой код, чтобы он не ждал возвращения этих обещаний, но я бы хотел, чтобы в моем коде не было этой проблемы.