try-catch返回未定义的变量

try-catch returns variable as undefined

本文关键字:变量 未定义 返回 try-catch      更新时间:2023-09-26

假设两次尝试都失败,则url返回为未定义,并且在这种情况下不会执行console.log。我的try-catch子句的堆叠有问题吗,或者url变量的范围有问题吗?

我使用try-catch是因为在我的上下文url1,2中,默认值可能不可用。

getURL = function()
{
   var url;
      try{
        url=data.url1;
      }
      catch(err1)
      {
        try{
          url=data.url2;
        }
        catch(err2)
        {
          console.log("Fetching default url");
          url=data.defaulturl;
        }
      }
      finally
      {
        //do something with url
      }
}

我尝试使用if-else-if结构,但如果数据.url 1/2/default不可用,它会返回错误。

if('String' === typeof data.url1)
{
}
else if(check for url 2/default etc.){...}

我最后一次尝试重新发明这个问题。。。但是,如果所有密钥都未定义,或者URL加载不成功,则根本没有成功。

getURL = function() {
  var localData = data || {};
  var keys = ['url1', 'url2', 'defaulturl'];
  var success = false;
  var currentKey;
  while (!success && keys.length > 0) {
    currentKey = keys.shift();
    if (localData.hasOwnProperty(currentKey)
      && 'string' === typeof localData[currentKey]) {
      try {
        url = localData[currentKey];
        // Url loading code may throws an exception,
        // or you can throw it below by hands if needed
        // Emulate loading result...
        if (Math.random() > .5) {
          throw 'Error in ' + localData[currentKey] + ' loading';
        }
        success = true;
      } catch(exception) {
        // Logging or something else here
        console.log(exception.toString());
      }
    }
  }
}