我有一个Google Spreadsheet脚本函数onFormSubmit(e)
,只要有人提交我的表单,就会被触发器调用。
在函数中,我创建模板文档的临时副本,并根据提交的表单值在其中进行搜索和替换。 然后将该临时副本转换为pdf并通过电子邮件发送到多个电子邮件地址,然后删除。
现在我已经读过锁定可能是一个问题,所以我决定得到一个LockService.getScriptLock()
,然后将我的脚本包装成锁,首先尝试锁定30秒lock.waitLock(30000)
,然后在脚本lock.releaseLock()
的末尾释放锁以防止并发问题。
当有人提交表单时,脚本本身似乎永远不会运行超过13秒。
总而言之,代码看起来有点像这样:
function onFormSubmit(e) {
// Get a public lock on the script
var lock = LockService.getScriptLock();
try {
lock.waitLock(30000); // Wait for 30 seconds
// copy template, search and replace etc...
lock.releaseLock()
}catch(e) {
Logger.log('Could not obtain lock after 30 seconds.');
MailApp.sendEmail("admin@something.com", "Could not obtain lock after 30 seconds.");
}
}
还有什么我应该做的吗?我锁定太多还是太少?我记得在我的Java时代,锁定全局应用程序会话上下文的时间太长了;如何制作模板的副本,打开模板的副本以进行搜索和替换,是否需要某种锁定?