Обработка обещаний в пакетной записи в облачной функции Firebase - PullRequest
0 голосов
/ 15 апреля 2020

Я использую следующую функцию в моих функциях 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, я Получение этой ошибки: Обещания должны быть обработаны надлежащим образом

Что я должен изменить, чтобы правильно обрабатывать обещания?

Я прочитал много документов о том, как обрабатывать Обещания, но у меня нет Я был в состоянии сделать это. Если бы вы могли помочь, это было бы действительно здорово.

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Я решил это с помощью следующего

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);
    }
}
0 голосов
/ 15 апреля 2020

batch.commit представляется асинхронной функцией, поэтому измените

Promise.resolve(batch.commit());

на

await batch.commit();
...