js中setTimeout导致try catch无法捕获异常的问题解决

 更新时间:2025年07月27日 10:56:47   作者:北苇渡江  
本文主要介绍了在JavaScript中捕获setTimeout及ajax异步请求回调里的未捕获异常的问题解决,具有一定的参考价值,感兴趣的可以了解一下

碰到一个有趣的小问题,setTimeout、ajax异步请求回调里的代码发生了异常,try catch却没有捕获到。

function test(){
  	try {
		setTimeout(function(){
			throw 'error';
		}, 1);
	} catch (e) {
		console.log("try catch里捕获的异常" + e);
	}
}

function testAjax(){
	try {	
		$.ajax({
		  url: "xxx",
		  cache: false,
		  success: function(data){
		    throw 'error';
		  }
		});
	} catch (e) {
		console.log("try catch里捕获的异常" + e);
	}
}

运行结果如下:

那么如何捕获这里面的异常呢?总不可能在每个延时函数里再增加异常捕获。
最终找到了:window.onerror

// 注意事项:js中对象初始化慢于方法,在方法调用时最好加个延迟,让window.onerror加载完毕。
window.onerror = function(message, source, lineno, colno, error){ 
	// message:错误消息(字符串)。在HTML οnerrοr=""处理程序event(sic!)中可用。
	// source:引发错误的脚本的URL(字符串)
	// lineno:发生错误的行号(数值)
	// colno:发生错误的行的列号(数值)
	// error:错误对象(对象)
	var message = [
            'Message: ' + msg,
            'URL: ' + url,
            'Line: ' + lineNo,
            'Column: ' + columnNo,
            'Error object: ' + JSON.stringify(error)
        ].join(' - ');
	console.log(message);
	// 当函数返回true时,这可以防止触发默认事件处理程序(就是浏览器控制台打印红色的异常信息)。
	return true;
};

到此这篇关于js中setTimeout导致try catch无法捕获异常的问题解决的文章就介绍到这了,更多相关js try catch无法捕获异常内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 3款实用的在线JS代码工具(国外)

    3款实用的在线JS代码工具(国外)

    本文为大家推荐3款非常实用的在线JS代码工具,可以帮助你方便地处理JavaScript或jQuery代码
    2012-03-03
  • 防止浏览器记住用户名及密码的简单实用方法

    防止浏览器记住用户名及密码的简单实用方法

    很多浏览器都有自动填写功能,我在input上使用了autocomplete="off",但在有的浏览器上还是被记住了用户名跟密码,请问有没有更有效及简便的方法来防止浏览器记住用户名及密码
    2013-04-04
  • 深入浅析JavaScript中对事件的三种监听方式

    深入浅析JavaScript中对事件的三种监听方式

    最近这段时间因为每天要修改网站,为网站做特效,所以看了很多的js接触事件,自己只会使用一小部分,有时用的时候也比较混乱,现在系统的整理了一下,本篇文章跟大家分享的是JavaScript中对事件的三种监听方式
    2015-09-09
  • js 排序动画模拟 冒泡排序

    js 排序动画模拟 冒泡排序

    在js中,想让线程sleep一下确实不是一件简单的事情,过多的使用定时器或者回调函数,会让复杂,凌乱,这时,可以考虑能否使用队列来做一些简
    2012-07-07
  • javascript笔记之匿名函数和闭包

    javascript笔记之匿名函数和闭包

    这篇文章主要为大家详细介绍了javascript笔记之匿名函数和闭包的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • js实现图片360度旋转

    js实现图片360度旋转

    本文主要介绍了js实现图片360度旋转的思路与方法。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • JavaScript常见手写题超全汇总

    JavaScript常见手写题超全汇总

    作为前端开发,JS是重中之重,下面这篇文章主要给大家介绍了关于JavaScript常见手写题的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • 判断JavaScript中的两个变量是否相等的操作符

    判断JavaScript中的两个变量是否相等的操作符

    可能有些同学看到这个标题就会产生疑惑,为什么我们要判断JavaScript中的两个变量是否相等,JavaScript不是已经提供了双等号“==”以及三等号“===”给我们使用了吗
    2019-12-12
  • webpack将js打包后的map文件详解

    webpack将js打包后的map文件详解

    下面小编就为大家分享一篇webpack将js打包后的map文件详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • JS document内容及样式操作完整示例

    JS document内容及样式操作完整示例

    这篇文章主要介绍了JS document内容及样式操作,结合完整实例形式分析了JavaScript document内容及样式的获取、修改、添加等相关操作技巧,需要的朋友可以参考下
    2020-01-01

最新评论