我需要从多次调用脚本安全地访问脚本属性。通过使用我自己的日志记录方法,我可以看到两个调用彼此之间的毫秒数(确切地说是2毫秒)。
有没有办法确保第一次通话所写的数据能够被第二次看到?此时,第二个调用将检查脚本属性中是否已有数据,但是看不到第一个调用设置的内容,因为它们距离太远。
答案 0 :(得分:1)
我已经解决了这个问题。事实证明它与使用PropertiesService的碰撞几乎没有关系。获得锁定的回调从未实际到达解锁阶段。
最长的时间,我认为这是因为一个新的锁覆盖了当前锁的数据并导致解锁失败,但实际上是在它解锁之前获得锁定抛出异常的回调。我只是将其内容包装在try-catch块中,并将解锁调用放在finally
块中。
我真的应该早点把它想出来。
编辑:我应该指定我所说的“锁定”不是LockService的锁定。这是我自己的实现,它使用标记标识符而不是整个脚本。
答案 1 :(得分:0)
您可以使用Lock Service管理对共享资源的访问。它看起来类似于在Java中使用synchronized代码块。
var lock = LockService.getScriptLock();
lock.waitLock(30000);
var properties = PropertiesService.getScriptProperties();
properties.setProperty("key", value);
lock.releaseLock();
我无法对此进行测试 - 知道它是否适用于您的用例会很有趣。有关锁定服务的更多信息https://developers.google.com/apps-script/reference/lock/