我正在构建一个将由多个其他脚本使用的脚本库。这些脚本将同时运行,我需要控制对单个资源(电子表格)的访问。
文档对我来说并不完全清楚。 Class Lock示例引用LockService.getPublicLock();
方法。但这种方法似乎不再存在。
要测试LockService
我创建了一个具有获取锁的方法doTest的库:
this.doTest = function(testClient){ var lock = LockService.getScriptLock(), 成功;
try {
lock.waitLock(1000);
Logger.log(testClient + ' Obtained lock');
Utilities.sleep(2000);
lock.releaseLock();
} catch (e) {
Logger.log(testClient + ' Could not obtain lock after 2 seconds.');
}
}
测试库用于另外两个测试脚本。如果我同时运行测试脚本,则两个脚本有时无法获取锁定。这正是我想要看到的。
但是,鉴于文档中的示例引用了另一种方法以及库在不同脚本中的用法,我想确定它是如何工作的。
所以问题是:脚本锁是否可以跨库工作,并且无论库是否在不同的脚本中使用,它都会锁定代码段。还有其他我应该担心的问题吗?
答案 0 :(得分:3)
我相信你的假设是正确的:库中使用的Lock实例将由使用该库的所有脚本共享。至少这也是我的假设。
如果您查看Resource Scoping section of the Libraries page in Google Apps Script reference,然后向下滚动到共享和非共享资源表,您将看到Lock是非共享资源,已解释在表格脚注中作为
这意味着库拥有自己的资源/功能实例以及所有实例 使用库共享的脚本,并且可以访问该共享 实例
我必须说,Resource Scoping部分的措辞相当令人困惑,' ' '非共享&#39 ; 概念没有得到很好的解释。但它的要点是:只要你的Lock在库代码中创建,所有使用该库的脚本都将访问锁的同一个实例。