有没有办法在JavaScript回调中捕获异常?这有可能吗?
Uncaught Error: Invalid value for property <address>
这是jsfiddle:http://jsfiddle.net/kjy112/yQhhy/
try {
// this will cause an exception in google.maps.Geocoder().geocode()
// since it expects a string.
var zipcode = 30045;
var map = new google.maps.Map(document.getElementById('map_canvas'), {
zoom: 5,
center: new google.maps.LatLng(35.137879, -82.836914),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
// exception in callback:
var geo = new google.maps.Geocoder().geocode({ 'address': zipcode },
function(geoResult, geoStatus) {
if (geoStatus != google.maps.GeocoderStatus.OK) console.log(geoStatus);
}
);
} catch (e) {
if(e instanceof TypeError)
alert('TypeError');
else
alert(e);
}
发布于 2010-09-09 23:39:36
它不会捕获示例中的任何内容的原因是,一旦调用了geocode()
回调,try/catch
块就结束了。因此,geocode()
回调是在try
块的作用域之外执行的,因此不能被它捕获。
据我所知,在JavaScript回调中捕获抛出的异常是不可能的(至少,不可能以任何简单的方式)。
发布于 2013-06-23 03:06:38
可以,您可以覆盖window.onerror的默认行为
window.onerror = function(message, file, lineNumber) {
// all errors will be caught here
// you can use `message` to make sure it's the error you're looking for
// returning true overrides the default window behaviour
return true;
};
发布于 2012-03-06 04:47:30
您确实可以捕获在JavaScript回调函数中触发的异常。
关键是在回调代码中设置try/catch
块,因为回调代码外部的任何try/catch
块在回调代码执行时都已经退出。因此,虽然上面的try/catch
块不能捕获调用回调函数时抛出的任何异常,但您仍然可以这样做:
// this will cause an exception ing google.maps.Geocoder().geocode()
// since it expects a string.
var zipcode = 30045;
var map = new google.maps.Map(document.getElementById('map_canvas'), {
zoom: 5,
center: new google.maps.LatLng(35.137879, -82.836914),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
// exception in callback:
var geo = new google.maps.Geocoder().geocode({ 'address': zipcode },
function(geoResult, geoStatus) {
try {
if (geoStatus != google.maps.GeocoderStatus.OK) console.log(geoStatus);
} catch(e){
alert("Callback Exception caught!");
}
}
);
当抛出异常时,您将能够捕获该异常。我不能百分之百确定是否会出现这种情况,所以我写了一些测试代码来验证。在Chrome 19.0.1055.1开发版本中,该异常被捕获。
https://stackoverflow.com/questions/3677783
复制相似问题