return在catch块中执行失败



由于没有指定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

相关内容

最新更新