Методы выгрузки Firebase Firestore занимают намного больше времени, чем другие методы - PullRequest
0 голосов
/ 09 февраля 2020

Итак, я создал приложение, используя 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 ().

На этот раз изменения на сервере были мгновенными, но проблема возникла при ожидании методов для вернуть обещание с сервера. Это та часть, которая сейчас вызывает отставание. Кто-нибудь знает, почему это происходит? Я мог бы просто изменить свой код, чтобы он не ждал возвращения этих обещаний, но я бы хотел, чтобы в моем коде не было этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...