如何使用 Google 表单同时管理 'submit' 事件

How to manage 'submit' event at the same time using Google Forms

我有一个 Google 表单作为测试,它在事件提交发生时执行脚本。该脚本从用户那里获取最后一个电子邮件地址并发送一封带有消息的电子邮件(测试自定义分数)。

function manager(e) {
   var ultimoCorreo = getUltimoCorreo();
   validarPuntaje(e.response, ultimoCorreo);
}

function getUltimoCorreo() {
   var rango = HOJA_CALCULO.getRange(1,2,HOJA_CALCULO.getLastRow(),1); // Rango donde se encuentran los correos en la hoja de calculo
   var ultimoCorreo = rango.getCell(HOJA_CALCULO.getLastRow(),1).getValue();
   return ultimoCorreo.toLowerCase(); // Convertimos el correo a minusculas por si el usuario mandó mal el correo

}

这个工作正常。但是当多个用户同时发送他们的答案时,我遇到了麻烦。例如:当4个用户同时发送表单时,每个分数的邮件发送到最后一个邮件。

如何在 google 表单中同时管理 'submit' 事件?

更新:我见过 LockService 但我还不明白它是如何工作的。

尝试使用锁定服务,看看会发生什么:

function manager(e) {
  var hasLock,lockService,ultimoCorreo;

  lockService = LockService.getScriptLock();

  hasLock = lockService.tryLock(10000);

  if (!hasLock) {
    MailApp.sendEmail(recipient, 'Failed to process your Form submission', 'The code failed');
    Logger.log('Could not obtain lock after 10 seconds.');
    return;
  }

  ultimoCorreo = getUltimoCorreo();
  validarPuntaje(e.response, ultimoCorreo);

  lockService.releaseLock();
}