首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用UrlFetchApp写入谷歌电子表格时锁定服务

使用UrlFetchApp写入谷歌电子表格时锁定服务
EN

Stack Overflow用户
提问于 2022-03-20 21:47:11
回答 1查看 64关注 0票数 0

我还没有找到关于这个问题的帖子。我不清楚Lock服务在用UrlFetchApp编写电子表格时扮演什么角色。

我问的是如何防止一个问题--而不是一个目前正在发生的问题(我不知道如何充分地模拟这个问题)。Lock服务是否应该与UrlFetchApp "put“方法一起使用,用于编写Google电子表格,以防止同一脚本的几乎并发用户覆盖?如果是这样的话,基本代码语法是否正确?

次要问题:在UrlFetch中没有选项可以使用"SpreadsheetApp.flush()"-type命令在释放锁之前应用所有挂起的电子表格更改。UrlFetchApp是否确保在返回前完成所有工作表更改?

同样,现在使用UrlFetchApp编写电子表格没有问题--问题是如何防止数据丢失或覆盖,同时执行代码。

代码语言:javascript
运行
复制
 var lock = LockService.getScriptLock();
       try {
         lock.waitLock(15000); // wait 15 seconds for others' use of the code section and 
           lock to stop and then proceed
       } catch (e) {
           Logger.log('Could not obtain lock after 15 seconds.');
           return "Error: Server busy try again later."
       }
  var url= `https://sheets.googleapis.com/v4/spreadsheets/${ssID}/values/${postRange}?valueInputOption=RAW`;
    var options = {
        muteHttpExceptions: true,
        contentType: 'application/json',
        method:   'put',    
        payload: JSON.stringify(data), data
        headers: { Authorization: 'Bearer ' + clientToken }
        };
   var response= UrlFetchApp.fetch(url,options); 
 lock.releaseLock();
// END - end lock here
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-21 10:44:24

  • 对您的代码来说,使用LockService本身似乎很好。您还可以考虑使用tryLock而不是waitLock,这是您喜欢的。
  • 如果您没有特定的理由不这样做,我建议使用电子表格服务高级工作表服务,而不是使用UrlFetchApp。这会简化你的代码。
  • UrlFetchApp返回时,API请求已经完成。到那时,所有的纸张更改都应该已经做好了。只有当您希望在进行更新的同一脚本中使用更新后的数据时,同花顺才能在Apps脚本服务的上下文中有意义,因为脚本可能直到它结束时才会应用电子表格更改。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71550919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档