Вы действительно можете перехватывать исключения, возникающие в функции обратного вызова 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!");
}
}
);
и вы сможете захватить исключение при его выбросе. Я не был уверен на 100%, так ли это, или нет, поэтому я написал тестовый код для проверки. Исключение фиксируется, как и ожидалось, в Chrome 19.0.1055.1 dev.