繁体   English   中英

GetScriptLock似乎不起作用

[英]GetScriptLock does not seem to work

我正在尝试在提交表单时生成唯一的号码。 我已将我的脚本简化为以下测试。

function onFormSubmit(event) {

  // Get a script lock, because we're about to modify a shared resource.
  var lock = LockService.getScriptLock();

  // Wait for up to 30 seconds for other processes to finish.
  lock.waitLock(30000);

  var ticketNumber = Number(ScriptProperties.getProperty('lastTicketNumber')) + 1;
  ScriptProperties.setProperty('lastTicketNumber', ticketNumber);

  targetCell = event.range.offset(0, event.range.getNumColumns(), 1, 1); 
  targetCell.setValue(ticketNumber);

  SpreadsheetApp.flush();

  // Release the lock so that other processes can continue. 
  lock.releaseLock();

};

我发现,如果我在一秒钟内提交两个表格,我会得到相同的票号。

任何帮助,将不胜感激。

前言 :您正在使用已弃用的ScriptProperties服务,该服务已由Properties Service替换。 你可能想先改变它。

在过去,我在尝试快速连续使用项目属性时收到了相同的结果。 几乎就像旧的值在任何缓存应用程序脚本用于脚本属性几秒钟时都会挂起。

我建议使用缓存服务来补充需要立即反映更改的脚本。

修改代码:

function onFormSubmit(event) {

  // Get a script lock, because we're about to modify a shared resource.
  var lock = LockService.getScriptLock();

  // Wait for up to 30 seconds for other processes to finish.
  lock.waitLock(30000);      

  var scriptCache = CacheService.getScriptCache();
  var scriptProperties = PropertiesService.getScriptProperties(); 

  var cachedTicketNumber =  scriptCache.get('lastTicketNumber');
  var ticketNumber;

  if(cachedTicketNumber !== null){
    ticketNumber = Number(cachedTicketNumber) + 1;
  } else { 

    //Cache has expired/does not exist, fall back to properties service     
    ticketNumber = Number(scriptProperties.getProperty('lastTicketNumber')) + 1;
  }

  //Set properties service, and cache values of the ticket number
  scriptProperties.setProperty('lastTicketNumber', ticketNumber);
  scriptCache.put('lastTicketNumber', ticketNumber, 21600); //21600 seconds = 6 hours, if you want it to last that long

  targetCell = event.range.offset(0, event.range.getNumColumns(), 1, 1); 
  targetCell.setValue(ticketNumber);

  SpreadsheetApp.flush();

  // Release the lock so that other processes can continue. 
  lock.releaseLock();

};

暂无
暂无

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

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