我使用 Google 应用脚本创建了一个表单,并发送了 Google 电子表格中的所有数据。
我的 GS 代码:
function doGet(e){
return HtmlService.createTemplateFromFile("Form1");
}
我的 html 代码只是一个简单的输入标记,每当用户提交它时,它都会在 Google 电子表格中追加行。
这是我的代码:
function executeProgram(agentSub){
var ss = SpreadsheetApp.openByUrl(url);
var sheet = ss.getSheetByName("Submission");
var timeStamp = new Date();
sheet.appendRow([timeStamp,name,age]);
}
现在,如果只有一个人提交表单,代码就可以正常工作。但如果 2 个人同时提交,则只会创建 1 行而不是 2 行。看起来第二个与第一个重叠。但是,如果第二个人在第一个人提交后 1 秒提交,则代码运行良好(创建了 2 行)。我在这里缺少什么以及如何解决它?
谢谢!
最佳答案
回答
Lock Service允许脚本阻止对代码部分的并发访问。当您有多个用户或进程修改共享资源并希望防止冲突时,这会很有用。
根据限制的不同,锁定服务有三种不同的方法,在这种情况下您需要使用 getScriptLock()确保无论用户身份如何,代码部分都不能同时执行。
一步一步
使用前面的方法定义您的
Lock
var lock = LockService.getScriptLock();
定义
Lock
的开始,有两个不同的选项:- tryLock(timeoutInMillis)如果未获取锁则返回 false,否则返回 true。
- waitLock(timeoutInMillis)如果无法获取锁则抛出异常
使用 releaseLock() 定义
Lock
的结尾。它允许等待锁的其他进程继续。(可选检查):hasLock()如果返回 false
- 未获取锁
tryLock
或waitLock
从未被调用- 在检索锁之前超时
releaseLock()
被调用
关于javascript - Google App Script 中同时多次提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65420165/