【发布时间】:2015-08-26 13:04:00
【问题描述】:
我有一个 Google 电子表格脚本函数 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 时代,将全局应用程序会话上下文锁定太久是一种罪过。还有如何制作模板副本,并打开模板副本进行搜索和替换,这是否需要某种锁定?
【问题讨论】:
标签: google-apps-script google-sheets locking google-forms