《深入浅出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..');
}

最新文章

  1. 转载 Android 多线程处理之多线程用法大集合
  2. Redis 无法正常关闭服务
  3. Droid4x设置代理抓包
  4. 读MBE
  5. getDimension,getDimensionPixelOffset和getDimensionPixelSize的一点说明
  6. Factory Girl使用
  7. PHP常用的基本文件和目录操作总结
  8. 获取当前页面的url
  9. [JS]省市区数据及方法调用
  10. 微服务配置内容《网上copy》=========》如何创建一个高可用的服务注册中心
  11. hdu 3065 AC自动机(各子串出现的次数)
  12. HTTP引流神器Goreplay详解【官译】
  13. 定义Sales_data类型
  14. sublime text 3安装
  15. 音乐app各部分笔记(一)
  16. 在Thinkphp中【自动加载自定义扩展配置文件】!
  17. 从头入手jenkins
  18. Babelfish 基本试用
  19. WinPE启动U盘的制作方法与软件下载(通用PE工具箱/老毛桃/大白菜WinPE)
  20. 【转】记一次ASP.NET MVC性能优化(实际项目中)

热门文章

  1. 043 用户注册功能03--Redis安装及完成短信发送功能
  2. 微信小程序:防止多次点击跳转(函数节流)
  3. Java学习:迭代器简介
  4. NVDLA软件架构和源码解析 第一章—内核驱动【华为云技术分享】
  5. Oracle For Linux 恢复日记 霆智X8III
  6. 比较器Comparable和Comparator
  7. .NET中的泛型概述
  8. C#文件操作之把一个文件复制到另外一个文件夹下
  9. 对Apache2进行简单配置
  10. zynq7020开发板+ Z-turn调试计划