异常:无法检索表单数据。请稍候并重试

Chi*_*pta 2 triggers exception google-apps-script async-await google-forms

我最近经常收到此错误,因为我的客户认为这是我这边的错误,但它是 Google 那边的问题。 const respondentEmail = e.response.getRespondentEmail();,这是给我一个错误的地方,有人可以帮助我解决这个问题,因为我在互联网上找不到任何问题

async function onFormSubmit(e) {
Logger.log("Inside On Form Submit");
const form = FormApp.getActiveForm();
let latestFormResponse;
const formResponses = form.getResponses();
const respondentEmail = e.response.getRespondentEmail();
if (respondentEmail === "") return false 

///.. other code
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有人可以帮我吗?由于这个错误,我失去了客户:(

dou*_*ary 5

假设问题是间歇性的,您可以使用指数退避重试有问题的调用。替换这一行:

  const respondentEmail = e.response.getRespondentEmail();
Run Code Online (Sandbox Code Playgroud)

...和:

  let respondentEmail;
  try {
    respondentEmail = exponentialBackoff_(() => e.response.getRespondentEmail());
  } catch (error) {
    console.log(error.message);
    respondentEmail = '';
  }
Run Code Online (Sandbox Code Playgroud)

这是一个简单的exponentialBackoff_()实现:

/**
* Calls a closure, retries on failure, and returns the value it gives.
*
* Usage:
*   exponentialBackoff_(myFunction);
*   // ...or:
*   exponentialBackoff_(() => myFunction(param1, param2));
*   // ...or:
*   const result = exponentialBackoff_(() => myFunction(param1, param2));
*   // ...or:
*   const respondentEmail = exponentialBackoff_(() => e.response.getRespondentEmail());
*
* @see https://en.wikipedia.org/wiki/Exponential_backoff
* @param {Function} action The closure to call.
* @param {Number} maxNumTries Optional. The number of times to retry. Defaults to 5.
* @return {Object} The closure return value.
*/
function exponentialBackoff_(action, maxNumTries = 5) {
  // version 1.0, written by --Hyde, 29 December 2022
  //  - see https://stackoverflow.com/a/74952372/13045193
  for (let tryNumber = 1; tryNumber <= maxNumTries; tryNumber++) {
    try {
      return action();
    } catch (error) {
      if (tryNumber >= maxNumTries) {
        throw error;
      }
      Utilities.sleep(2 ** (tryNumber - 1) * 1000);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)