无法访问catch javascript中的变量

时间:2016-09-23 17:11:06

标签: javascript google-apps-script scope

我在一个函数中声明了一个变量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);
  }
    //..............//
}

我如何克服这个问题?

2 个答案:

答案 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

,请参见此处