服务在短时间内调用了太多次:exec qps。 (谷歌脚本)

时间:2016-06-01 07:57:02

标签: google-apps-script google-sheets

最近我的一些应用脚本在同时执行时显示错误。一切都运作良好多年,显然这种变化发生在谷歌方面。

这是执行记录结果: enter image description here

不幸的是,错误没有显示文件名和行号来正确调试它,但我的第一行是:

var ss = SpreadsheetApp.getActiveSpreadsheet()

因此,我假设应用程序实例同时调用SpreadsheetApp会导致错误。 SpreadsheetApp不在循环中,也不在任何函数内。它被调用来定义应用程序使用的全局变量s。

我的应用程序是在我的用户名下执行的,因为用户不应该访问我正在访问的电子表格。我担心我无法将整个电子表格保留在缓存服务中 - 我希望应用程序在调用时更新电子表格。

更新:

以下是其中一个应用的相关代码。

function doGet(e){

  var ref = e.parameter.ref;
  var ss = SpreadsheetApp.openById('########')
  var logsheet = ss.getSheetByName('LOG');
  logsheet.appendRow([new Date(),ref,JSON.stringify(e.parameter)])
  try{
     //Main code goes here
     return ContentService.createTextOutput(JSON.stringify({result:"ok"})).setMimeType(ContentService.MimeType.JSON);
  }catch(e){
     return ContentService.createTextOutput(JSON.stringify(e)).setMimeType(ContentService.MimeType.JSON)}
}

正如你所看到的,我在我的函数中尝试了{} catch(e),并且因为我得到的错误没有被它捕获,我认为它恰好在之前发生。

2 个答案:

答案 0 :(得分:1)

您可以将所有内容放入try-catch块中。还要记住在执行之前发布新版本的Web应用程序。

function doGet(e) {
    var response = {};
    try {
        SpreadsheetApp.openById('########')
            .getSheetByName('LOG')
            .appendRow([new Date(), e.parameter.ref, JSON.stringify(e.parameter)]);
        response.result = "OK";
    } catch (error) {
        response.result = "Error: " + error.toString();
    }

    return ContentService
        .createTextOutput(JSON.stringify(response))
        .setMimeType(ContentService.MimeType.JSON);
}

答案 1 :(得分:0)

刚刚发现手动黑客以避免此错误:

从私人浏览器模式打开您的电子表格。这将增加文档查看器的数量,并将增加限制:)