有没有办法告诉浏览器,例如Opera或Chrome,如果遇到未处理的异常,不要停止脚本执行?我只需要在浏览器中测试一些JS脚本,但页面还包含一些代码用于另一个(非常规浏览器)执行环境,因此修改代码作为使用try / catch包装是不实际的。
对于Chrome,我尝试将设置处理程序功能的代码放到window.onerror
只返回true
,然后错误没有出现在控制台中,但是脚本的执行无论如何都会中止。
具体来说,该页面包含Appcelerator Titanium平台的代码,但我只是测试一般的jQuery代码,所以我想在浏览器中进行。
答案 0 :(得分:2)
如果以延迟方式调用可疑代码
if(!TextUtils.isEmpty(response)){
String [] allProvinces = response.split(",");
/* how should I check whether allProvinces is null or not?
* it means the method "split" can possibly return a null value?
*/
if( allProvinces != null && allProvinces.length > 0){
for(String p :allProvinces) {
String [] array = p.split("//|");
Province province = new Province();
province.setProvinceName(array [0]);
province.setProvinceCode(array[1]);
weatherDb.saveProvince(province);
}
}
}
然后抛出的任何错误都会终止"线程"或者"微任务",但不影响你执行的其余部分。
答案 1 :(得分:0)
尽管你的想法看起来很实际,但实际上却无法强制执行。
相比之下,Java编程语言强制处理已检查的异常(可以从中恢复的异常),而未经检查的异常(例如RuntimeException
- 无法恢复的异常)可以只是通常在运行时发生在您的控件之外。由于它们基本上是不可恢复的,因此您的程序必须停止。
与java不同,JS JVM引发的异常无法在已检查和未检查的类别中分离。因为没有这样的区别,所以不可能避免脚本停止。
如果你将功能/无限分开怎么办?你应该如何从中恢复?
每个不同的场景都有一个独特的答案。这就是为什么对您关注的唯一剩余且有效的回应是,每当您担心try catch
将会发生并停止您的代码时使用Exception
阻止,并专门针对该情况进行处理。
对于window.onerror
事件处理程序,它与此问题无关,因为它不捕获运行时异常,它捕获在try catch块中未捕获原始异常时引发的错误即可。这就是为什么你得到了一个非常有趣的例外:xxxxx"附加到实际的原始异常消息。已经发生异常,您的脚本已经停止,您只能按照您想要的方式显示它。