Javascript 在云函数firebase中处理来自某个后台函数的意外故障

Javascript 在云函数firebase中处理来自某个后台函数的意外故障,javascript,firebase,google-cloud-functions,Javascript,Firebase,Google Cloud Functions,我在下面有一个可调用的initiatePayment函数,它处理用户从客户端付款时的付款。如果付款成功,则会将新文档记录到我的firestore数据库addNewRecord,然后最终从请求响应返回付款数据 export const initiatePayment = functions.https.onCall(async (data, context) => { // destructure data argument const { userId } = data; t

我在下面有一个可调用的initiatePayment函数,它处理用户从客户端付款时的付款。如果付款成功,则会将新文档记录到我的firestore数据库addNewRecord,然后最终从请求响应返回付款数据

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失败,您如何处理其错误并再次重试该函数以确保其成功?

考虑到您的代码,addNewRecord失败不应该有问题。由于函数只会在特定和受控的场景中被调用,在这些场景中,您将拥有正确调用函数所需的参数,因此您应该很好

无论如何,如果它失败一次,它很可能会再次失败,因此,您可以尝试使用队列系统,而不只是尝试重复执行。这样,您将在队列中维护该数据,并在检查和处理错误后再次运行,以确保添加记录

我建议您查看以下有关Javascript排队的文档,我相信这些文档可能会对您有所帮助


如果这些信息对你有帮助,请告诉我

很好的建议。我将开发队列系统,并在测试后返回给您。谢谢,没问题!很高兴听到这有帮助!请考虑投票还是接受它!:下面是尝试将addNewRecord函数用于队列系统的示例。让我知道你的想法。