javascript - Google App Script 中同时多次提交

标签 javascript google-apps-script google-sheets

我使用 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()确保无论用户身份如何,代码部分都不能同时执行。

一步一步

  • 使用前面的方法定义您的Lockvar lock = LockService.getScriptLock();

  • 定义Lock的开始,有两个不同的选项:

  • 使用 releaseLock() 定义Lock 的结尾。它允许等待锁的其他进程继续。

  • (可选检查):hasLock()如果返回 false

    • 未获取锁
    • tryLockwaitLock 从未被调用
    • 在检索锁之前超时
    • releaseLock() 被调用

关于javascript - Google App Script 中同时多次提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65420165/

相关文章:

javascript - (THREE.js) 软件渲染器未在 Node 中渲染我的场景

performance - 使用/在 Google Apps 脚本中在大型 Google 表格中搜索行的最快方法

charts - 谷歌电子表格图表中的命名范围?

javascript - 使用 AppScript/JavaScript 的 HTML 按钮事件

javascript - 使用 Node.js 按 ID 从 DocumentDB 读取文档失败

javascript - vue scroll div to top inside 方法

url - 谷歌电子表格 : Show Document URL in cell. 可能吗?

javascript - 使用 JavaScript 查询多个 Google 电子表格

javascript - Nightwatch 执行命令,迭代

javascript - 谷歌应用脚​​本: Cannot find function insertText in object Document