我是使用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个实际上正在运行该代码,并且一些信息丢失了,我猜想锁没有按我预期的那样工作。
能否请您帮我弄清楚如何实现锁? 提前非常感谢您。