Облачная функция Google onCreate не пишет в базу данных - PullRequest
0 голосов
/ 16 апреля 2020

Я создал функцию google для firebase, которая при добавлении нового диалога добавляет функцию к таблице «Пользователи» в новой коллекции для каждого пользователя в диалоге, но когда функция запускается, в базе данных ничего не происходит, пока что Я записал в консоль значения tp, чтобы убедиться, что они установлены правильно, и они работают. Я также попытался просмотреть журналы функций Google, и нет ошибок в соответствии с журналами, которые скрипт запускал без ошибок

Вот код для функции

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';

admin.initializeApp();

export const onConversationCreated = functions.firestore.document("Conversations/{conversationID}").onCreate((snapshot, context) => {
    let data = snapshot.data();
    let conversationID = context.params.conversationID;

    if(data){
        let members = data.members;
        for(let index = 0; index < members.length; index++){
            let currentUserID = members[index];
            let remainingUserIDs = members.filter((u: string) => u !== currentUserID)
            remainingUserIDs.forEach((m: string) =>  {
                return admin.firestore().collection("Users").doc(m).get().then((_doc) => {
                    let userData = _doc.data();
                    if(userData){
                        return admin.firestore().collection("Users").doc(currentUserID).collection("Conversations").doc(m).create({
                            "conversationID": conversationID,
                            "image": userData.image,
                            "unseenCount": 1,
                        });
                    }
                    return null;
                }).catch(() => {return null})
            });
        }
    }
    return null;
});

Может кто-нибудь сказать мне, если что-то не так с моим кодом или я должен дать разрешение функции для записи в базу данных облачного пожарного хранилища?

1 Ответ

0 голосов
/ 16 апреля 2020

Вы не правильно справляетесь с обещаниями. Ваша функция должна вернуть обещание, которое разрешается при выполнении всей асинхронной работы. Сейчас он просто возвращает значение NULL и не ожидает завершения какой-либо работы.

Все операции Firestore являются асинхронными и возвращают обещание. Вам нужно будет использовать эти обещания, чтобы создать одно обещание для возврата из функции. Это означает, что каждый раз, когда вы запрашиваете и пишете документ, это генерирует еще одно обещание для обработки.

Кроме того, вы должны знать, что не существует метода create(), который вы пытаетесь использовать для добавления документа. Возможно, вы хотели использовать set() вместо этого. Код взломает sh, если попытается выполнить create().

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