【发布时间】:2020-05-30 16:13:19
【问题描述】:
我正在寻找一种巧妙的解决方案来消除或限制 Google Sheets Apps 脚本处理程序中使用的 webhook 调用。为其他更改创建像onEdit 这样的简单触发器或“可安装触发器”是直截了当的,但两者都会为每个更改调用处理程序。如果有人正在编辑工作表并在几秒钟内更新了许多行,我只想触发一个事件而不是淹没我的 webhook 服务。 Javascript 中的常规模式是使用 setTimeout 和 clearTimeout 来确保事件处理程序的主体仅被调用一次,但 setTimeout 在 Google Apps 脚本运行时中不可用。
【问题讨论】:
-
如果您打算在有用户以标准用户模式打开电子表格的情况下使用它,那么我认为您仍然可以使用 onEdit() 来收集缓冲区中的编辑,然后使用setTimeOut 从客户端侧边栏刷新该缓冲区并进行网络挂钩调用。我认为您可能希望使用缓存服务来存储短期编辑缓冲区。我在使用 Utilities.sleep() 时看到的问题如下所示,它会在超时期间完成关闭应用程序脚本,因此我总是在运行 Utllities.sleep() 之前执行 SpreadsheetApp.flush()
-
感谢@Cooper,在读取保存在文档应用脚本上下文中的数据时,我没有想过使用侧边栏来执行“标准”javascript。在我的具体情况下,我也有来自表单提交的更新,所以我认为侧边栏不会有帮助。您如何推荐使用缓存服务?将字符串连接到单个缓存键并用锁包装?
-
我没想过用它来执行标准的 JavaScript,除了超时功能,但我想触发服务器端功能。您可以在 CacheService 中构建缓冲区。看看 CacheService 他们有一些简单的教程来展示如何使用它。
标签: javascript google-apps-script google-sheets webhooks