【问题标题】:Handle Promises in a Batch write in Firebase cloud function在 Firebase 云函数中批量处理 Promise
【发布时间】:2020-07-27 20:47:23
【问题描述】:

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

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 的文档,但我一直没能做到。如果你能帮上忙,那就太好了。

【问题讨论】:

标签: javascript firebase promise google-cloud-functions


【解决方案1】:

batch.commit好像是一个异步函数,所以改一下

Promise.resolve(batch.commit());

await batch.commit();

【讨论】:

    【解决方案2】:

    我通过以下方法解决了它

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      • 2020-03-31
      • 2017-08-10
      • 2022-08-14
      • 2021-05-31
      • 2018-01-21
      • 1970-01-01
      相关资源
      最近更新 更多