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

时间:2012-06-02 02:14:04

标签: 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;

2 个答案:

答案 0 :(得分:1)

如果您不需要ID是顺序的,那么最好使用时间戳:

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

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

答案 1 :(得分:0)

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

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