2016-04-12 11 views
0

私は$ .getJSONに例外をスローするとJSの問題が少しありますが、この例外は親関数によってキャッチされずJSエラーが発生します.."キャッチされていない[オブジェクトオブジェクト]"スロー&キャッチ時

Chromeのコンソールがいることを私に返し

Uncaught [object Object] 
(anonymous function) @ ConfLoader.class.js:24 
j     @ jquery.min.js:2 
k.fireWith   @ jquery.min.js:2 
x     @ jquery.min.js:4 
(anonymous function) @ jquery.min.js:4 

は、私は他の多くの投球を持っているとのtry/catchと、私はこの問題を持っていない... あなたはなぜ私を説明できますか? "

var ConfLoader = { 
    /* Attributes */ 
    apiToken : null, 
    lavaBaseURL : null, 
    apiURL : null, 

    /* Init method */ 
    load : function(file) { 
     $.getJSON(file, function(data) { 
      if (data.apiToken) 
       this.apiToken = data.apiToken; 
      else 
       throw new Exception("Token API (apiToken) not found into config file."); 
      if (data.lavaBaseURL) 
       this.lavaBaseURL = data.lavaBaseURL; 
      else 
       throw new Exception("Lava URL (lavaBaseURL) not found into config file."); 
      if (data.apiURL) 
       this.apiURL = data.apiURL; 
      else 
       throw new Exception("API URL (apiURL) not found into config file."); 
     }) 
     .fail(function() { 
      throw new Exception("File '"+file+"' not found."); 
     }); 
    }, 

    /* Methods */ 
    getApiToken : function() { 
     return this.apiToken; 
    }, 
    getLavaBaseURL : function() { 
     return this.lavaBaseURL; 
    }, 
    getApiURL : function() { 
     return this.apiURL; 
    } 
} 

そしてライン "新しい例外を投げる(" 見つからないファイル ' "+ファイル+"');":ここでは

は私ConfLoader "クラス" であります私のJSエラーを投げる..しかし、私キャンConfLoaderのメソッド「負荷」とき、私はここに、この例外をキャッチ:

var Powers = { 
    /* Attributes */ 
    confLoader : null, 

    /* Methods */ 
    init : function(configFile) { 
     try { 
      this.confLoader = ConfLoader.load(configFile); 
     } catch (e) { 
      throw e; 
     } 
    }, 
    launch : function() { 
     try { 

     } catch (e) { 

     } 
    } 
} 

「例外」クラスは、他のスローのために働くのカスタム例外クラスです:

function Exception(msg, fatal) { 
    this.message = msg; 
    this.fatal = fatal; 

    this.isFatal = function() { 
     return this.fatal; 
    } 
    this.getMessage = function() { 
     return this.message; 
    } 
    return this; 
} 

ありがとう! :)

答えて

0

failハンドラ$.getJSONのハンドラは、非同期です。つまり、投げられた例外は$.getJSONの呼び出し元まで伝播しません。代わりに例外をスローする代わりに、failハンドラで失敗を処理してみてください。

(あなたの成功ハンドラにも同じ問題があります)

+0

ああ、私はそれを疑った..しかし、それを解決する方法は? "async:false"の$ .ajaxを使用していますか? ..これは本当にきれいではありません.. –

+0

@JorisBertomeu私が言ったように、直接または失敗を処理する別の関数を呼び出すことによって、イベントハンドラの失敗を処理します。 – Chris

+0

元気?多分私は約束を使用してもいいですか? –

関連する問題