是否有可能捕获JavaScript异步回调中引发的异常?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

有没有办法在JavaScript回调中捕获异常?它甚至有可能吗?

Uncaught Error: Invalid value for property <address>

这里是jsfiddle:http : //jsfiddle.net/kjy112/yQhhy/

try {
    // 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) {
          if (geoStatus != google.maps.GeocoderStatus.OK) console.log(geoStatus);
       }
    );
} catch (e) {
    if(e instanceof TypeError)
       alert('TypeError');
    else
       alert(e);
}​
提问于
用户回答回答于

是的,可以覆盖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; 
};
用户回答回答于

在你的例子中它不会捕获任何东西的原因是因为一旦geocode()回调被调用,try/catch块就结束了。因此geocode()回调在try块的范围之外执行,因此不能被回收。

据我所知,无法捕获JavaScript回调中引发的异常(至少不是以任何直接的方式)。

扫码关注云+社区