google-apps-script - 如何延迟 Google 表单对 Google 表格的响应
问题描述
我有一个链接到电子表格的谷歌表单。在表单方面,我添加了一个 onFormSubmit From 表单触发器。
问题是在电子表格端触发了其他几个触发器,从 onSubmit 将数据发送到 webhook,然后信息被中继到最后一行数据..(触发器 Zapier、webhook 等)
当所有数据被完全计算并中继回最后一行时,在此过程中可能会出现来自表单的另一个提交,导致函数将中继数据输入到表单提交的最后一行。
我需要将表单响应延迟 X 时间,以允许数据从之前的表单提交中完成计算。
我曾尝试使用 LockService 和 Utilities.sleep(20000),但它似乎并没有阻止在定义的 waitLock 时间范围内提交表单。
function onFormSubmit(e)
{
try
{
var lock = LockService.getPublicLock();
// Wait for up to 30 seconds for other processes to finish.
lock.waitLock(30000);
Utilities.sleep(20000); // 20 second
var formResponses = e.response.getItemResponses();
var testInput = formResponses[0].getResponse();
//append NEW FORM URL to MAIN SPREADSHEET
var sh = SpreadsheetApp.openById("1jkvSWC1ew4mt1sEy6XX2vsc_5norWHrbOYQt5hLhwGA");
var lastRow = sh.getLastRow();//gets the last row of entered data
lastRow += 1;
sh.getRange('D'+lastRow).setValue(testInput);
// Release the lock so that other processes can continue.
lock.releaseLock();
}
catch (error)
{
// If there's an error, show the error message
return error.toString();
}
}
预期结果:将表单响应添加/提交到链接的电子表格中延迟 X 时间。
实际结果:表单接收到一个提交并且响应被添加到工作表上的一个新行,而不管正在使用的锁。延迟是添加到 lastRow 的附加信息。但是,我正在寻找的是从表单中排队/延迟提交。
解决方案
推荐阅读
- arrays - 需要根据字母顺序和基于大写和后跟小写对数组进行排序
- javascript - 使用泛型类型创建排序功能
- python - Python 套接字:我的 recv 协议在我调试它时接收所有数据,但在我运行它时不接收
- git - 如何在詹金斯中实现变更集
- r - 是否有一个闪亮的标签来显示带有语法突出显示的 R 语言代码?
- python - 抓取 flex-element Selenium Python
- javascript - 如何获得三组的总加法?
- sql - MS Access SQL,按特定顺序按年龄排序
- automation - 如何在 Opentest + appium 测试执行期间在同一会话中切换演员
- python - Python Azure 函数:失败异常:ModuleNotFoundError:没有名为“__main__”的模块