在Firebase云功能中批量处理承诺

时间:2020-04-15 00:13:45

标签: javascript firebase promise google-cloud-functions

我在我的 firebase函数中使用了以下函数,但是我无法正确处理承诺。

export const addNewMember_v0 = functions.https.onCall( async (data, context) => {
    if(context.auth){
        const memberName = data.memberName;
        const phone = data.phone;

        try {
            const querySnapshot = await db.collectionGroup('memberPrivate')
                .where('phone', '==', phone).get();
            if (querySnapshot === null) {
                const batch = db.batch();
                const memberDoc = db.collection('members').doc();
                const memberPrivateDoc = memberDoc.collection("memberPrivate").doc("info");

                batch.set(
                    memberDoc,
                    {'memberName':memberName},
                );

                batch.set(
                    memberPrivateDoc,
                    {'memberName':memberName}
                );

                Promise.resolve(batch.commit());
                return {available: true,  phone: phone, success: true};

            } else {
                return {available: false,  phone: phone, success: false};
            }
        }
        catch(error) {
            console.log(error);
            return {error: error, success: false};
        }        
    } else {
        return {error: "Not Authenticated", success: false};
    }
});

当我使用firebase deploy部署此代码时,出现此错误:必须妥善处理承诺

我应该改变什么才能正确处理承诺?

我阅读了许多有关如何处理Promises的文档,但是我还没有做到。如果可以的话,那就太好了。

2 个答案:

答案 0 :(得分:0)

batch.commit似乎是一个异步函数,因此请更改

Promise.resolve(batch.commit());

await batch.commit();

答案 1 :(得分:0)

我通过以下方法解决了

try{
    if(condition){
        const fetchPromises: Promise<any>[] = [];

        fetchPromises.push(batch.commit());
        fetchPromises.push(Promise.resolve({available: true,  phone: phone, success: true}));
        return Promise.all(fetchPromises);
    }
}