繁体   English   中英

在Google Apps脚本中锁定服务和脚本属性

[英]Lock Service and Script Properties in Google Apps Script

我正在Google Apps脚本上编写代码。 我需要给每个用户一个唯一的号码。

首先,我使用tryLock和ScriptProperties类编写了一些代码。 当6个用户几乎同时调用该功能时,它为几个人提供了相同的号码。 因此,现在我正在使用waitLock和ScriptProperties。

tryLock和waitLock在锁定能力方面有什么区别吗? 另外,我想知道ScriptProperties的更新时间。 是否为所有用户立即更新?

如果您对此问题提供建议,我真的很感激。


//我的带有tryLock的代码:在6个用户的测试中,这为3个用户提供了相同的数字。

var glock = LockService.getPublicLock();
if( glock.tryLock(10000) )
{
  var val = ScriptProperties.getProperty(proName) * 1 + 1;
  ScriptProperties.setProperty(proName, val);
  glock.releaseLock();
  return val;
} else { return null; }

//另一个带有waitLock的代码:在8位用户的测试中,每个代码都给出了唯一的编号。

var val = null;
try{
  var glock = LockService.getPublicLock();
  glock.waitLock(10000);
  val = ScriptProperties.getProperty(proName) * 1 + 1;
  ScriptProperties.setProperty(proName, val);
  glock.releaseLock();
} catch (e) { }
return val;

如果您不需要ID是连续的,则最好使用时间戳代替:

var glock = LockService.getPublicLock();
if (glock.tryLock(10000)) {
  var val = (new Date()).getTime();
  glock.releaseLock();
  return val;
} else { 
  return null; 
}

方法tryLock()waitLock()工作原理相同,只是如果第一个方法无法获取锁定,则第一个方法返回false,而第二种方法则抛出异常。

如果要标识脚本的唯一用户,则可以使用userproperties存储中的属性,因为每个用户都有一个唯一存储。 如果您从未见过他,请使用时间戳记或他的用户属性存储库中的内容生成一个唯一的号码。 如果您在他的商店之前见过他,那么他的商店将已经包含您上次访问时生成的唯一编号。 如果需要合并所有数字,请将其复制到脚本属性存储中。

例如,请参见http://ramblings.mcpher.com/Home/excelquirks/gassnips/anonymoususerregistration

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM