如何在由Google应用脚本部署的Web应用中正确使用LockService?

时间:2019-06-01 00:02:46

标签: javascript google-apps-script

我是使用google脚本的新手,但我难以理解在Google应用程序脚本(特别是在Webapp上)上使用LockService的正确方法。我目前正在开发一个Web应用程序,该应用程序将由25个不同的用户访问,并且他们可能在同一时间段内访问,并且我希望避免发生冲突,因为此脚本中有重要信息。 >

我已经读过关于LockService的信息,并且我确实了解这个概念,它应该防止不同的用户同时访问涉及该锁的部分或整个代码,对吗?但是我不确定是否应该在.gs文件或html中以及如何实现它。 在这里,我保留了代码的主要部分:

INDEX

<html>
  <head>
    <meta name="MobileOptimized" content ="width">
  </head>

  <body>
    <form id="customerForm">
      <div id="output"></div> 
      <div id="signature"></div><br>
      <img id="rendered" src="" style="display:none">
      <input type="button" value="Enviar Firma" onclick="renderSignature();saveImage()"/>  </body>
    </form>
</html>
<?!= HtmlService.createHtmlOutputFromFile('JavaScript').getContent(); ?>

管理GS文件返回的脚本

<script>
//..some code
  function saveImage(e){ //This sends the image src to saveImages function
    //Assign values to bytes and sign variables
    };
    google.script.run.withSuccessHandler(onSuccess).compare_tickets(bytes, sign);
    google.script.run.withFailureHandler(onFailure).compare_tickets(bytes, sign);
  } 
  function onSuccess(bytes){
     google.script.run.saveImage(bytes)
  }
  function onFailure(error) {        
    //Throw alert with the error
  }
</script>

GS文件

function doGet(e){
  return HtmlService
    .createTemplateFromFile("index")
    .evaluate()
    .setTitle("Firme aquí por favor")
    .setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

function compare_tickets(bytes, sign){ //first function runned by the index
    //some code that reads Some spreadsheets 
}

function saveImage(bytes){    //second function runned by the index
  var lock = LockService.getScriptLock();
  if(lock.tryLock(10000)){
    //Do operations/readings/writings on different spreadsheets in case you get the lock
    lock.releaseLock();
  }                                                                               
  else{
    //Tell the user that the system is busy and should retry to send the info
  }
}

因此,上面的代码显示我正在尝试在GS文件上实现LockService,我已经尝试同时从3个不同的浏览器进行访问,但是看起来其中3个实际上正在运行该代码,并且一些信息丢失了,我猜想锁没有按我预期的那样工作。

能否请您帮我弄清楚如何实现锁? 提前非常感谢您。

0 个答案:

没有答案