Javascript GetScriptLock似乎不起作用

Javascript GetScriptLock似乎不起作用,javascript,google-apps-script,Javascript,Google Apps Script,我试图在提交表单时生成一个唯一的编号。我已将脚本简化为以下内容进行测试 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. lo

我试图在提交表单时生成一个唯一的编号。我已将脚本简化为以下内容进行测试

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();

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


任何帮助都将不胜感激。

前言:您正在使用不推荐的服务,此服务已被替换为。你可能想先改变这个

在过去,我在尝试快速连续利用项目财产时收到了相同的结果。这几乎就像旧值在脚本用于脚本属性的缓存应用程序中挂起几秒钟一样

我建议对需要立即反映更改的脚本使用to补充

修改代码:

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();

};