Google Apps脚本属性服务访问冲突

时间:2017-06-20 21:35:51

标签: javascript google-apps-script thread-safety collision

我需要从多次调用脚本安全地访问脚本属性。通过使用我自己的日志记录方法,我可以看到两个调用彼此之间的毫秒数(确切地说是2毫秒)。

有没有办法确保第一次通话所写的数据能够被第二次看到?此时,第二个调用将检查脚本属性中是否已有数据,但是看不到第一个调用设置的内容,因为它们距离太远。

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/