Облачные функции onCall - как вернуть объект - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь прочитать возвращаемое значение функции облака Google в функции onCall, но продолжаю читать ноль.

Это мой angular код:

const callable = this.angularFireFunctions.httpsCallable('createEvent');
callable(this.formGroup.value).toPromise()
.then((next) => {
  console.log(next); //function succeeds but returned null
})
.catch((err) => {
  console.log(err);
})

У меня есть следующая облачная функция определена. Все связано внутри транзакции.

export const createEvent = functions.https.onCall((data: any, context: CallableContext) : any | Promise<any> =>
{
    const user_DocumentReference = db.collection('users').doc(context.auth?.uid);
    const event_DocumentReference = db.collection('events').doc();

    db.runTransaction((transaction: FirebaseFirestore.Transaction) =>
    {
        return transaction.getAll(user_DocumentReference)
        .then((documentSnapshots: FirebaseFirestore.DocumentSnapshot<any>[]) =>
        {
            const user_DocumentSnapshot = documentSnapshots[0].data();

            if (typeof user_DocumentSnapshot === 'undefined')
            {
                // return some error message json object
            }

            transaction.create(event_DocumentReference,
            {
                //json object
            });

            //return success object with few attributes
        })
        .catch((firebaseError: FirebaseError) =>
        {
            //return some error message json object
        }
    });
});

Как я могу вернуть json объекты в качестве обещания? Я пробовал следующее безрезультатно:

return Promise.resolve({ json object });
return Promise.reject({ json object });

1 Ответ

1 голос
/ 29 марта 2020

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

return db.runTransaction(transaction => { ... })

Как видно из документов API, runTransaction возвращает обещание, возвращаемое обработчиком транзакции (или "updateFunction").

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