我在我的 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的文档,但是我还没有做到。如果可以的话,那就太好了。
答案 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);
}
}