Что мне делать, если я хочу ничего не делать в одном из моих путей выполнения в фоновой функции облачного триггера? - PullRequest
0 голосов
/ 07 сентября 2018

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

export const updateDataWhenUserUnattendTheEvent = functions.firestore
    .document('events/{eventId}/Attendee/{userId}')
    .onDelete((snap, context) => {

        const eventID = context.params.eventId
        const eventRef = snap.ref.firestore.collection('events').doc(eventID)
        const db = admin.firestore()

        return db.runTransaction(async t => {
            const doc = await t.get(eventRef)

            if (doc) {

                const eventRankPoint = doc.data().rankPoint
                let eventCapacity = doc.data().capacity 

                return t.update(eventRef,{
                    isFullCapacity : false,
                    capacity : eventCapacity + 1,
                    rankPoint: eventRankPoint - 1
                })

            } else {

                // what should I write in here? empty promise?


                return new Promise()

            }




        })


    })

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

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Вы можете просто вернуть null, если нет асинхронной работы, выполняемой в некотором пути кода ваших функций.Обещание действительно нужно, только если оно отслеживает некоторую асинхронную работу.

В качестве альтернативы, вы можете вернуть обещание, которое было решено немедленно, с помощью Promise.resolve(null)

0 голосов
/ 07 сентября 2018

Поскольку db.runTransaction является функцией async, она будет постоянно возвращать Promise.

Вы можете удалить оператор else, и метод будет работать так, как ожидается, поскольку runTransaction вернет Promise<void>, что является действительным ответом для облачных функций

export const updateDataWhenUserUnattendTheEvent = functions.firestore
    .document('events/{eventId}/Attendee/{userId}')
    .onDelete((snap, context) => {
        const eventID = context.params.eventId;
        const eventRef = snap.ref.firestore.collection('events').doc(eventID);
        const db = admin.firestore();

        return db.runTransaction(async t => {
            const doc = await t.get(eventRef);

            if (doc) {
                const eventRankPoint = doc.data().rankPoint;
                let eventCapacity = doc.data().capacity ;

                return t.update(eventRef,{
                    isFullCapacity : false,
                    capacity : eventCapacity + 1,
                    rankPoint: eventRankPoint - 1
                });
            }
        });
    });

Вы также можете сделать onDelete функцию async, что означает, что вы можете принудительно заставить ее всегда возвращать Promise - приведенный ниже код действителен и будет корректно выходить из функции.

  export const updateDataWhenUserUnattendTheEvent = functions.firestore
    .document('events/{eventId}/Attendee/{userId}')
    .onDelete(async (snap, context) => {
        // Do Nothing

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