我有一个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表单中同时管理' 事件?
更新:我看过LockService,但我还不了解它是如何工作的。
答案 0 :(得分:1)
尝试使用锁定服务,看看会发生什么:
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();
}