此代码是否正确锁定了onFormSubmit(e)方法?

时间:2015-08-26 13:04:01

标签: google-apps-script google-sheets locking google-form

我有一个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时代,锁定全局应用程序会话上下文的时间太长了;如何制作模板的副本,打开模板的副本以进行搜索和替换,是否需要某种锁定?

0 个答案:

没有答案