我在从 Ajax 回调中的回调中捕获抛出时遇到了一些麻烦。我在这里做了一个最小的测试用例(下面的代码)。
在init()
函数中,我创建了一个新的类对象ResourceLoader
并尝试获取http://www.jvanderspek.com。通过 $.ajax。这成功并ResourceLoader.prototype.onDone
调用了该函数。现在为了争论,我想在那里抛出一个错误,并在我的调用树的顶部,在init();
函数中捕获它,但是唉,抛出没有被捕获。现在,这可能与 Ajax 在不同的线程中执行有关,并且当执行已经在 try 块之外时调用 throw,但是我该如何补救呢?也许我弄错了原因,但额外的问题是,为什么会发生这种情况?
<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>