Ajax コールバックでコールバックからのスローをキャッチするのに問題があります。ここで最小限のテスト ケースを作成しました(以下のコード)。
関数で、init()
クラスの新しいオブジェクトを作成し、http://www.jvanderspek.comResourceLoader
を取得しようとします。$.ajax経由。これは成功し、関数が呼び出されます。引数のために、そこでエラーをスローし、関数内の呼び出しツリーの上部でそれをキャッチしたいと思いますが、残念ながら、スローはキャッチされません。これはおそらく、別のスレッドで実行されている Ajax と、実行が既に try ブロックの外にあるときにスローが呼び出されたことに関係していますが、どうすれば修正できますか? おそらく私は原因について誤解していますが、おまけの質問は、なぜこれが起こるのかということです.ResourceLoader.prototype.onDone
init();
<html>
<head>
<title>testbed</title>
<script src="http://code.jquery.com/jquery-1.8.3.js" type="text/javascript"></script>
</head>
<body onload="init();">
</body>
<script type="text/javascript">
init = function() {
ResourceLoader = function(){}
ResourceLoader.prototype.load = function(){
var done = $.proxy(this.onDone, this);
$.ajax({
url: "http://www.jvanderspek.com",
}).done(done);
}
ResourceLoader.prototype.onDone = function() {
console.log( "onDone");
throw(new Error());
}
var rl = new ResourceLoader();
try {
rl.load();
}
catch(error){
window.alert( "Error caught" );
}
}
</script>
</html>