簡體   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