Javascript Google应用程序脚本属性服务访问冲突

Javascript Google应用程序脚本属性服务访问冲突,javascript,google-apps-script,thread-safety,collision,Javascript,Google Apps Script,Thread Safety,Collision,我需要通过多次调用脚本来安全地访问脚本属性。通过使用我自己的日志记录方法,我可以看到这两个调用之间的间隔在毫秒以内(确切地说是2毫秒) 有没有办法确保第一次调用写入的数据被第二次调用看到?此时,第二个调用会检查脚本属性中是否已经有数据,但看不到第一个调用设置了什么,因为它们相距太近。您可以使用锁定服务管理对共享资源的访问。它看起来类似于在Java中使用同步的代码块 var lock = LockService.getScriptLock(); lock.waitLock(30000);

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


有没有办法确保第一次调用写入的数据被第二次调用看到?此时,第二个调用会检查脚本属性中是否已经有数据,但看不到第一个调用设置了什么,因为它们相距太近。

您可以使用锁定服务管理对共享资源的访问。它看起来类似于在Java中使用同步的代码块

  var lock = LockService.getScriptLock();
  lock.waitLock(30000);
  var properties = PropertiesService.getScriptProperties();
  properties.setProperty("key", value);            
  lock.releaseLock();

我无法测试这一点——了解它是否适用于您的用例会很有趣。有关锁服务的更多信息

我已修复该问题。事实证明,它与使用PropertiesService的冲突没有什么关系。获得锁的回调实际上从未达到解锁阶段

在很长一段时间里,我认为这是因为一个新锁重写了当前锁的数据,导致解锁失败,但实际上是回调使锁在解锁前抛出异常。我只是将其内容包装在一个try-catch块中,并将解锁调用放在
finally
块中

我真的应该早点弄明白


编辑:我应该指定我所说的“锁”不是LockService的锁。这是我自己的实现,它使用标记标识符而不是整个脚本。

也许是您所需要的。我以前使用过锁定服务,但当我只想在满足某些参数时锁定时,它会锁定整个脚本。我不能使用脚本或用户锁,因为我必须能够通过自己的特权Google帐户从多个位置(在本例中为Google电子表格)调用脚本。我正在尝试创建自己的标记锁系统,在这个系统中,可以根据标记获取锁。但是,我以前没有将它与我的自定义锁一起使用,所以我可以尝试一下。我已经成功地解决了我的问题。结果证明这与访问冲突无关。无论如何,我相信谷歌已经解决了这个问题。