我在一个函数中声明了一个变量aliasError
,并试图在该变量中存储使用try / catch块捕获的错误值。
但是我无法在catch块中访问该变量。我可以在try
块中和try / catch块之外访问它。
不确定这是javascript还是google-apps-script问题。
这是一个片段:
function onFormSubmit(e)
{
//...........//
var aliasError; // VARIABLE DECLARED
// CREATE UPDATES IN GMAIL
// 1. ALIASES
// do we need a new account and if not, then the latest account
var conciergeStatus = getConcierge();
var newAccountNeeded;
parseInt(conciergeStatus[0]) == 1 ? newAccountNeeded = true : newAccountNeeded = false;
if(newAccountNeeded)
{
//..........//
}
else
{
var conciergeAccount = conciergeStatus[2];
conciergeAccLog = conciergeAccount;
Logger.log("*******************UPDATING CONCIERGE ACCOUNT************************");
Logger.log(conciergeAccount["name"]);
var aliases = conciergeAccount["aliases"];
var userEmail = conciergeAccount["primaryEmail"];
conciergeEmail = userEmail;
var alias = {
alias: responseMap["Alias email"]
};
Logger.log(userEmail);
Logger.log(alias);
aliasError = "No error"; // VARIABLE ACCESSED SUCCESSFULLY
try
{
aliasError = "No error"; // VARIABLE ACCESSED SUCCESSFULLY
AdminDirectory.Users.Aliases.insert(alias, userEmail);
}
catch(err)
{
aliasError = err; // VARIABLE ACCESS FAILED
}
Logger.log(aliases);
}
//..............//
}
我如何克服这个问题?
答案 0 :(得分:1)
如果您尝试用console.log(aliasError)替换catch语句中的赋值行,那么改变颜色?导致以下代码显示变量,以便在catch语句中非常容易访问:
function x(){
var aliasError = 10;
try
{
aliasError = "No error"; // VARIABLE ACCESSED SUCCESSFULLY
xx=yy;
}
catch(err)
{
aliasError = err; // VARIABLE ACCESS FAILED
}
console.log(aliasError)
}
x();
在编辑器中进行状态解析并非易事。我从未使用谷歌编辑器,但我不会完全信任编辑器的代码分析。
答案 1 :(得分:1)
实际上你不能。这不是Google应用程序脚本编辑器或运行时问题,它是Javascript规范的一部分。 catch块创建一个新的变量声明环境(新作用域),其中catch块中唯一可访问的变量是作为catch参数的异常本身。有关完整的ECMA规范https://www.ecma-international.org/ecma-262/10.0/index.html#sec-variablestatements-in-catch-blocks
,请参见此处