最近我的一些应用脚本在同时执行时显示错误。一切都运作良好多年,显然这种变化发生在谷歌方面。
不幸的是,错误没有显示文件名和行号来正确调试它,但我的第一行是:
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),并且因为我得到的错误没有被它捕获,我认为它恰好在之前发生。
答案 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)
刚刚发现手动黑客以避免此错误:
从私人浏览器模式打开您的电子表格。这将增加文档查看器的数量,并将增加限制:)