google-apps-script - 有没有办法缓存 doPost 请求?
问题描述
我有一个函数可以展平 JSON 对象的内容 [function 'parser'] 和另一个将展平的结果粘贴到 Google Sheet [function 'writePayload'] 的最后一行。这些函数中的每一个都在 doPost(e) 中调用,如下所示:
function doPost(e){
var data = e.postData.contents;
var output = parser(data);
writePayload(output);
return ContentService.createTextOutput('ok');
}
我面临的挑战是我偶尔会在这么短的时间内收到 post 请求,writePayload 函数会覆盖第一个有效负载的内容。writePayload 函数查找工作表的最后一行,然后从最后一行开始粘贴内容。当在短时间内发布帖子时,两个有效负载将从同一行开始写入,从而导致一些数据丢失。
当快速连续发出发布请求时,是否可以使用计时器或缓存功能来防止数据被覆盖?
解决方案
建议
有关Cooper在评论中提到的有关锁定服务的更多上下文,也许您可以尝试以下示例锁定服务方法:
此脚本源自类似的帖子答案我可以在两个函数中使用 LockService 吗?
function mainFunction() {
functionOne(); //run for 30 seconds
functionTwo(); //run for 30 seconds
}
function functionOne(){
var lock = LockService.getScriptLock();
try {
lock.waitLock(5000); // Tries for at most 5 seconds to get the lock
Utilities.sleep(30000); // e.g. run for 30 seconds
Logger.log("Function 1 has finished running at: " + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "HH:mm:ss"));
} catch (e) {
Logger.log('function 1 could not obtain lock after 5 seconds.');
}
}
function functionTwo(){
var lock = LockService.getScriptLock();
try {
lock.waitLock(5000);
Utilities.sleep(30000); // e.g. run for 30 seconds
Logger.log("Function 2 has finished running at: " + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "HH:mm:ss"));
} catch (e) {
Logger.log('function 2 could not obtain lock after 5 seconds.');
}
}
日志结果:
2个函数运行时间相差30秒
推荐阅读
- c++ - Boost::Asio :服务器代码仅在某些时候导致 SEGFAULT,似乎与 io_contexts 的破坏有关
- google-apps-script - G Drive,递归文档列表,以 MyDrive 开头
- python - 在 Django 中使用 API 时遇到问题
- laravel - Laravel 护照和客户端与个人访问令牌
- css - TailwindCSS:以线性渐变访问父元素的背景
- macos - Nativescript TNS 运行 ios Mac mini (M1):警告:CocoaPods 出现问题
- google-sheets - 突出显示不在百分比范围内的单元格
- typescript - 如何声明 JSON 文件中的空数组类型?
- html - 图片标签的行为类似于 div
- laravel - 作曲家更新错误不符合 psr-4 自动加载标准。跳过