【发布时间】:2020-05-12 04:31:03
【问题描述】:
我有一个可调用的initiatePayment 函数,它在用户从客户端付款时处理他们的付款。如果付款成功(addNewRecord),这会在我的 Firestore 数据库中记录一个新文档,然后最终从请求的响应中返回付款数据。
export const initiatePayment = functions.https.onCall(async (data, context) => {
// destructure data argument
const { userId } = data;
try {
// 1. Process payment via external API request
const payment = await paymentExternalRequest();
const { paymentData, status } = payment.response;
// 2. If payment processing was a success, record new payment data
if (status === "succeeded") {
addNewRecord(userId, paymentData);
}
// 3. Return paymentData to client
return paymentData;
} catch (error) {
throw new functions.https.HttpsError("cancelled", "Cancelled", error);
}
});
addNewRecord函数:
const addNewRecord = async (userId, paymentData) => {
const newRecordToAdd = { userId, paymentData };
const docRef = admin
.firestore()
.collection("transactions")
.doc(paymentData.id);
try {
const newRecord = await docRef.set({ userId, transaction: newRecordToAdd });
return newRecord;
} catch (error) {
console.log(error);
}
};
我的问题是如果addNewRecord 失败了,你如何处理它的错误并再次重试该函数以确保其成功?
【问题讨论】:
标签: javascript firebase google-cloud-functions