如果我不希望在后台触发云功能的执行路径之一中做任何事情,该怎么办?

时间:2018-09-07 02:22:06

标签: firebase google-cloud-functions

据我所知,后台触发云功能应该返回一个承诺,对吗?但是如果我不想在执行路径之一中什么都不做怎么办?

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()

            }




        })


    })

我希望仅当文档存在时我的功能才能工作。所以我该怎么做 ?我写了新的Promise,但是....我实际上不知道该怎么办。预先感谢

2 个答案:

答案 0 :(得分:2)

如果在函数的某些代码路径中没有异步工作要执行,则只需返回null。仅当它跟踪某些异步工作时,您才真正需要一个诺言。

或者,您可以返回可以立即用Promise.resolve(null)解决的诺言

答案 1 :(得分:0)

由于db.runTransactionasync函数,它将始终返回Promise

您可以删除else语句,该方法将按预期执行,因为runTransaction将返回Promise<void>,这是对Cloud Functions的有效响应

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;
    });