try catch 小结 , node的回调callback里不能捕获异常 , 不能被v8优化(现在能了),
2024-08-28 10:58:05
《深入浅出Nodejs》时,在第四章 - 异步编程中作者朴灵曾提到,异步编程的难点之一是异常处理,书中描述"尝试对异步方法进行try/catch操作只能捕获当次事件循环内的异常,对call back执行时抛出的异常将无能为力"。
//test.js
var test = undefined;
try{
var f1 = function(){
console.log(test.toString());
}
}
catch(e){
console.log('error..');
}
//assume somewhere f1() will be called as an call back function
f1();
这里模仿f1函数是做为call back(回调)函数传递给其他函数,在其他函数执行过程中执行call back的函数。从代码表面来看,很容易认为如果Line 7,
1 console.log(test.toString());
如果这行code发生异常,会自然认为其会被try catch捕获到,并不会引起进程的Crash。但其实,运行结果是:
运行错误,Line 11的错误并没有打印,说明在程序中错误没有被Try Catch。而Nodejs作为单进程单线程程序,将会引起进程的Crash(崩溃)!
------------------------------------------------------------------------------------------------------------------------
因此,在进行异步编程时,个人觉得:
要考虑到call back函数可能产生的错误,增加类型检查代码或在Call back被真正执行的地方增加Try cach等,避免异常未能被捕获导致进程Crash
------------------------------------------------------------------------------------------------------------------------
如本例,可修改如下,
1 if(typeof(test) != 'undefined'){
2 console.log(test.toString());
3 }
或者
1 console.log(test? test.toString() : '[undefine]');
或者
try{
f1();
}
catch(e)
{
console.log('new error..');
}
最新文章
- 转载 Android 多线程处理之多线程用法大集合
- Redis 无法正常关闭服务
- Droid4x设置代理抓包
- 读MBE
- getDimension,getDimensionPixelOffset和getDimensionPixelSize的一点说明
- Factory Girl使用
- PHP常用的基本文件和目录操作总结
- 获取当前页面的url
- [JS]省市区数据及方法调用
- 微服务配置内容《网上copy》=========》如何创建一个高可用的服务注册中心
- hdu 3065 AC自动机(各子串出现的次数)
- HTTP引流神器Goreplay详解【官译】
- 定义Sales_data类型
- sublime text 3安装
- 音乐app各部分笔记(一)
- 在Thinkphp中【自动加载自定义扩展配置文件】!
- 从头入手jenkins
- Babelfish 基本试用
- WinPE启动U盘的制作方法与软件下载(通用PE工具箱/老毛桃/大白菜WinPE)
- 【转】记一次ASP.NET MVC性能优化(实际项目中)