由于没有指定tl
而抛出错误的基本示例:
function allmatches() {
SpreadsheetApp.getActive().getSheetByName('data').getRange('A1').setValue(tl)
}
并且为了知道在Web应用程序的执行中是否有任何错误,我添加了try catch
:
function doGet(e) {
const lock = LockService.getDocumentLock();
if (lock.tryLock(360000)) {
try {
var okgo = e.parameter.okgo;
allmatches();
} catch (e) {
lock.releaseLock();
return ContentService.createTextOutput('Error!');
} finally {
lock.releaseLock();
return ContentService.createTextOutput('Ok!');
}
} else {
return ContentService.createTextOutput('Timeout!');
}
}
我用Python调用这个Web App,理论上答案应该是Error!
:
import requests
okgo = 'go'
webAppsUrl = "https://script.google.com/macros/s/XXXXXXXXXX/exec"
url = webAppsUrl + "?okgo=" + okgo
web_app_response = requests.get(url)
print(web_app_response.text)
但是响应是:
Ok!
我错过了什么?
添加,当没有web应用程序运行时,它会进入catch
:
function test() {
try {
allmatches();
} catch (e) {
Logger.log(e)
}
}
输出:
ReferenceError: tl is not defined
从下面的示例中可以看到,无论是否发生错误,finally
块都将运行。因此,在OP的情况下,ContentService.createTextOutput('Error!');
很快被ContentService.createTextOutput('Ok!');
取代,用户不知道错误。
function testTry() {
try {
let x = a;
console.log(x);
}
catch(err) {
console.log(err);
}
finally {
console.log("finally");
}
}
7:52:56 AM Notice Execution started
7:52:58 AM Info [ReferenceError: a is not defined]
7:52:58 AM Info finally
7:52:57 AM Notice Execution completed
function testTry() {
try {
let x = 1;
console.log(x);
}
catch(err) {
console.log(err);
}
finally {
console.log("finally");
}
}
7:54:37 AM Notice Execution started
7:54:38 AM Info 1
7:54:38 AM Info finally
7:54:38 AM Notice Execution completed