在 Firebase 云函数中批量处理 Promise
Posted
技术标签:
【中文标题】在 Firebase 云函数中批量处理 Promise【英文标题】:Handle Promises in a Batch write in Firebase cloud function 【发布时间】: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 的文档,但我一直没能做到。如果你能帮上忙,那就太好了。
【问题讨论】:
这能回答你的问题吗? What could this be about? [TsLint Error: "Promises must be handled appropriately"] 不确定为什么要调用 Promise.resolve()。这根本不适合这里。您的函数还需要返回一个 Promise,该 Promise 使用要发送给调用者的数据进行解析。 【参考方案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);
【讨论】:
以上是关于在 Firebase 云函数中批量处理 Promise的主要内容,如果未能解决你的问题,请参考以下文章