可以为GAS的lockservice跨同一项目中的多个功能工作

时间:2016-02-21 12:32:14

标签: google-apps-script google-sheets locking google-spreadsheet-api

我写的脚本有问题,问题的解决方案是锁定服务,以避免与表单提交冲突。由于我不知道这将是一个问题,我不得不回去重新访问旧脚本。

我的脚本有一些不同的功能,它将数据从一个函数传递到另一个函数。最终它将数据写入工作表,创建PDF,可以通过电子邮件发送并将PDF存储到谷歌驱动器中的文件夹。

以下是我的意思的简短例子

function firstFunction() {

  //Do stuff, return something
  return something;

  secondFunction(something);

}


function secondFunction(something) {

// Do stuff, return test

thirdFunction(test);

}





function thirdFunction(test) {

// Do stuff, return that

return that;

fourthFunction(that);

}

function fourthFunction(that){


// finish doing stuff. Write data


}

我还有一个单独的脚本,可以调用第一个脚本并遍历数据列表,批量生成PDF。

我担心如果有两个人同时调用脚本,我会再次遇到问题。

鉴于我给出的示例脚本,我是否必须在每个函数上使用LockService?或者我可以在第一个函数中声明锁定并在最后一个函数中释放它。

我也很好奇第二个脚本会如何调用前几次。在这个中添加锁定服务是否足够,或者我是否也必须将它添加到第二个?

提前致谢。

以下编辑

我记得我在Code Review上发布了真实的代码以获取建议,而且我得到了一些!! Code Review Post

1 个答案:

答案 0 :(得分:1)

我认为在这种情况下你根本不需要锁服务。

在Lock Service文档中,它指出:
[锁定服务]阻止对代码段的并发访问。当您有多个用户或进程修改共享资源并希望防止冲突时,这可能很有用。 (文件:https://developers.google.com/apps-script/reference/lock/lock-service#getScriptLock%28%29) 或[类锁定]对回调和触发器特别有用,其中用户操作可能会导致对共享资源的更改,并且您希望确保不是冲突。 (文件:https://developers.google.com/apps-script/reference/lock/lock#tryLock%28Integer%29

现在,在阅读了您link to in your edit的脚本代码之后,我没有看到脚本正在写入的共享资源。所以我得出结论,不需要锁定。 (编辑:在第二次阅读时,我看到脚本正在写一张纸,共享资源。所以你的锁只能进入那个功能。)

我会将此点交叉发布到Google Apps Script Plus社区https://plus.google.com/communities/102471985047225101769,因为那里有专家可以确认。